确保只能从我的页面通过AJAX调用PHP页面

时间:2014-02-16 02:21:01

标签: php ajax

我有一个utilitypage.php,它写了一些数据库信息。我从mysite.com/mypage.html通过AJAX调用这个PHP页面。

如果某些恶意访问者查看源代码并找到被调用的php页面的名称,则可以直接转到该页面或从其他站点调用它。

如何确保只能从mysite.com/mypage.html调用utilitypage.php? (检测是否从其他地方调用)

我查看了一些$ _SERVER变量,但看到它们并不总是可靠的。 mypage.html的访问者不是经过身份验证的用户。

谢谢!

1 个答案:

答案 0 :(得分:2)

一种非常简单(但可能不可靠)的方法是检查标题:

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

但它们可能是欺骗性的,所以不要仅仅依赖它们。

但正如here

所述Chris
  

没有任何绝对万无一失的方法可以防止这种情况,因为任何方法都可以   标题信息可以被欺骗。基于会话的令牌是   另一种可能的解决方案,但在这种情况下你的javascript是   公众可以访问,所以任何想花一点时间的人都可以   确定令牌系统的工作方式并找出解决方法。

唯一方式确保为每个用户提供一个唯一的令牌并将其存储在会话中。然后,当您发出ajax请求并确保它匹配时,只需将此令牌传回,这样您就知道该请求是合法的。

查看此信息以获取更多信息http://en.wikipedia.org/wiki/Cross-site_request_forgery