我有一个在很多地方使用AJAX Calls的网站,
并且所有人都调用一个名为ajax_agent.php
的文件
以及像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.');
?
谢谢!
答案 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进行请求,则可以由人工制作。没有办法阻止这种情况。这个答案只是提供了一种过滤掉直接访问该页面的普通用户的方法。