2011-02-08 37 views
5

Tôi đọc mà kiểm tra một cách X-yêu cầu-Với tiêu đề của yêu cầu ajax là tốt để đảm bảo yêu cầu không đến từ bên ngoài. Về phía máy chủ, làm cách nào để kiểm tra tiêu đề này? và cách đúng để phản ứng của tiêu đề này là thiếu hoặc sai (chuyển hướng, ném ngoại lệ, khác)?Làm thế nào máy chủ có thể kiểm tra các yêu cầu ajax không phải từ trang web, X-yêu cầu-Với

+4

Bạn có thể muốn nhìn vào http://stackoverflow.com/questions/623299/can-the-x-requested-with-http-header-be-spoofed; nó cho thấy rằng 'X-Requested-With' có thể được giả mạo. –

+0

bạn muốn thấy điều này cũng http://www.yiiframework.com/forum/index.php?/topic/4945-yiiapp-request-isajaxrequest/ –

Trả lời

8

Bạn có thể kiểm tra xem nó như thế này ...

$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND 
      strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'; 

Nếu bạn là chỉ mong truy cập thông qua XHR, sau đó chỉ cần exit nếu tiêu đề này là không có mặt.

Lưu ý: Tiêu đề này không quan trọng để giả mạo. Đừng dựa vào điều này cho bất cứ điều gì nhưng có vẻ như nó đến từ na XHR.

+0

Tôi muốn sử dụng nó để đảm bảo rằng yêu cầu không đến từ một người đã xem mã js của tôi, lấy các url và gửi dữ liệu đầu vào từ bên ngoài trang web của tôi. Vì vậy, nếu nó có thể được giả mạo, sau đó không có cách nào để bảo vệ khỏi điều này? – zmol

+0

@zmol Tôi xin lỗi, không có cách nào chỉ bằng cách tìm kiếm sự hiện diện của tiêu đề đó. – alex

+0

nhưng có cách nào khác không? Nó không phải là thông qua tiêu đề này. Mục tiêu cuối cùng là để đảm bảo rằng yêu cầu không đến từ một người đọc mã js, đọc những dòng url ajax, và đang chơi url từ bên ngoài :) – zmol

6

duy nhất chắc chắn cách chữa cháy để đảm bảo rằng yêu cầu đến từ trang web của bạn chứ không phải ai khác là đưa ra dấu hiệu độc đáo cho người sử dụng và lưu nó trong phiên họp của họ. Trong mã của bạn, nơi bạn thực hiện yêu cầu AJAX, sau đó bạn cần phải chuyển mã thông báo này trở lại và nếu nó khớp với mã trong phiên của họ thì bạn có thể chắc chắn rằng yêu cầu đến từ trang web của bạn. Thông tin

thêm: http://en.wikipedia.org/wiki/Cross-site_request_forgery

Các vấn đề liên quan