如何将php文件设置为仅用于AJAX?

时间:2013-06-19 22:59:46

标签: php ajax jquery

我有一个在很多地方使用AJAX Calls的网站, 并且所有人都调用一个名为ajax_agent.php的文件 以及像ajax_agent.php?action=x&arg1=y&etc=true

这样的GET变量

但是一个讨厌的用户可以直接使用自定义变量转到ajax_agent.php。它使用准备好的PDO语句,因此我猜没有sql注入的危险,但它仍然可以揭示它不应该发生的事情。

那么有没有办法检测客户端是否是另一个php页面(AJAX)或实际的浏览器窗口?这样它会die('you don't have permission to see this page.');

谢谢!

2 个答案:

答案 0 :(得分:5)

AJAX请求就像任何其他请求一样是HTTP请求。请求的任何部分都可能被攻击者操纵。您不能相信它的任何部分,因此从浏览器检测到它是一个Ajax请求而不是通过浏览器处理的请求将不可靠。

如果您真的想保护自己的数据,请强制用户登录并使用会话来强制执行。

答案 1 :(得分:1)

您可以尝试使用HTTP_X_REQUESTED_WITH标头。这取决于您的javascript(库)是否正确发送此标头,但是:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  // do AJAX only stuff
}

来源:http://davidwalsh.name/detect-ajax

编辑:请注意,正如我在问题评论中所述,如果可以使用javascript进行请求,则可以由人工制作。没有办法阻止这种情况。这个答案只是提供了一种过滤掉直接访问该页面的普通用户的方法。