-2

我有一个网站在很多地方都使用 AJAX 调用,它们都调用一个文件,调用ajax_agent.php 并使用 GET 变量,例如ajax_agent.php?action=x&arg1=y&etc=true

但是讨厌的用户可以直接使用自定义变量访问 ajax_agent.php。它使用准备好的 PDO 语句,所以我猜没有 sql 注入的危险,但它仍然可以揭示它不应该的东西。

那么有什么方法可以检测客户端是另一个 php 页面(AJAX 处理它)还是实际的浏览器窗口?这样它会die('you don't have permission to see this page.');吗?

谢谢 !

4

2 回答 2

5

AJAX 请求与其他请求一样是 HTTP 请求。请求的任何部分都可能被攻击者操纵。您不能信任它的任何部分,因此检测它是来自浏览器的 Ajax 请求而不是通过浏览器操纵的请求是不可靠的。

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

于 2013-06-19T23:06:23.843 回答
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 发出请求,则可以由人类发出。没有办法阻止这种情况。这个答案只是提供了一种过滤掉直接访问该页面的普通用户的方法。

于 2013-06-19T23:04:34.133 回答