阻止对PHP的非AJAX请求

时间:2011-08-19 21:36:27

标签: php ajax

  

可能重复:
  Prevent Direct Access To File Called By ajax Function

我正在创建一个依赖于AJAX调用PHP页面的站点。有没有办法阻止访问原始数据? (即通过他们自己的帖子请求访问php文件)。

我猜想最好的方法(如果可能的话)是阻止PHP将数据发送到任何不是来自AJAX的东西(因为它必须来自同一个域)。有什么建议吗?

4 个答案:

答案 0 :(得分:0)

当请求没有正确的GET或POST变量时,您可能无法返回任何内容。

说实话,老实说没有什么可担心的,因为任何实际浏览你发送ajax请求的页面的人都可能试图做一些恶意的事情并且他们收到通过ajax发送的内容并没有获得任何东西。没有普通用户的每个观看源......

答案 1 :(得分:0)

if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
     //allow access
}
else
   die("Direct access restricted");

虽然

可以讨价还价

答案 2 :(得分:0)

Ajax库在其请求中添加了X-Requested-With: XmlHttpRequest标头,因此您可以测试其存在:

if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XmlHttpRequest')) {
    // not an ajax request
}

然而,恶意用户也可以轻松发送此标头,因此请勿使用此标头来保护敏感数据。

答案 3 :(得分:0)

正如@Evan在评论中链接的那样,您可以通过在HTTP_X_REQUESTED_WITH中查找$_SERVER来检测XmlHttpRequest请求。但是这个值来自客户端发送的标头。与用户的任何信息一样,这可能是欺骗性的。

实际上没有办法以实用的方式阻止非XmlHttpRequest。如果阻止API非常重要,您可以根据对主页的请求向Javascript发出唯一键(并将其存储在会话中)。它在XmlHttpRequest中传递,当该页面看到并验证它时,它提供访问权限。但即使是唯一的密钥也可以从页面中删除。