服务器如何检查不是来自站点的Ajax请求,X-Requested-With

时间:2011-02-08 04:01:10

标签: php ajax

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

2 个答案:

答案 0 :(得分:8)

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

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

如果您只希望通过XHR进行访问,那么如果此标头不存在,则只需exit

注意:此标头对于欺骗是微不足道的。不要依赖于此,但看起来它来自na XHR

答案 1 :(得分:7)

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

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