我有一个utilitypage.php,它写了一些数据库信息。我从mysite.com/mypage.html通过AJAX调用这个PHP页面。
如果某些恶意访问者查看源代码并找到被调用的php页面的名称,则可以直接转到该页面或从其他站点调用它。
如何确保只能从mysite.com/mypage.html调用utilitypage.php? (检测是否从其他地方调用)
我查看了一些$ _SERVER变量,但看到它们并不总是可靠的。 mypage.html的访问者不是经过身份验证的用户。
谢谢!
答案 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