2011-02-08 54 views
5

我读了检查ajax请求的X-Requested-With标头是确保请求不是来自外部的好方法。在服务器端,我该如何检查这个头文件?什么是正确的方式来反应这个标题丢失或错误(重定向,抛出异常,否则)?服务器如何可以检查不是来自站点的Ajax请求,X请求 - 与

+4

你可能想看看http://stackoverflow.com/questions/623299/can-the-x-requested-with-http-header-be-spoofed;它表明`X-Requested-With`可以被欺骗。 – 2011-02-08 04:06:24

+0

你也想看到这个http://www.yiiframework.com/forum/index.php?/topic/4945-yiiapp-request-isajaxrequest/ – 2012-09-20 03:40:43

回答

8

你可以检查它像这样...

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

如果你是通过XHR期待访问,那么就exit如果这个头不存在。

注意:这个头是微不足道的恶搞。除了之外,不要只依赖这个,它看起来像是来自na XHR

6

确保请求来自您的网站而不是其他人的唯一可靠方法是向用户发出唯一令牌并将其存储在他们的会话中。在您的代码中,您发出AJAX请求后,您需要将此令牌传回,如果它与会话中的令牌相匹配,则可以确保请求来自您的网站。

更多信息: http://en.wikipedia.org/wiki/Cross-site_request_forgery