如何将php文件设置为仅用于AJAX?
我有一个网站,在很多地方使用AJAX调用, 它们都调用一个文件,名为如何将php文件设置为仅用于AJAX?,php,ajax,jquery,Php,Ajax,Jquery,我有一个网站,在很多地方使用AJAX调用, 它们都调用一个文件,名为ajax\u agent.php 使用GET变量,比如ajax\u agent.php?action=x&arg1=y&etc=true 但是讨厌的用户可以使用自定义变量直接访问ajax_agent.php。它使用预先准备好的PDO语句,所以我想不会有sql注入的危险,但它仍然可以揭示不应该出现的情况 那么,有没有办法检测客户端是另一个php页面(AJAX)还是一个实际的浏览器窗口?这样它将死亡('您没有查看此页面的权限') 谢
ajax\u agent.php
使用GET变量,比如ajax\u agent.php?action=x&arg1=y&etc=true
但是讨厌的用户可以使用自定义变量直接访问ajax_agent.php。它使用预先准备好的PDO语句,所以我想不会有sql注入的危险,但它仍然可以揭示不应该出现的情况
那么,有没有办法检测客户端是另一个php页面(AJAX)还是一个实际的浏览器窗口?这样它将死亡('您没有查看此页面的权限')代码>
谢谢 您可以尝试将HTTP\u X\u REQUESTED\u与
头一起使用。这取决于您的javascript(库)是否正确发送此标头,不过:
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// do AJAX only stuff
}
资料来源:
编辑:请注意,正如我在问题注释中所说的,如果可以使用javascript发出请求,那么它可以由人类发出。这是无法避免的。这个答案只是提供了一种过滤直接访问页面的普通用户的方法。AJAX请求与其他请求一样,也是HTTP请求。攻击者可以操纵请求的任何部分。您不能信任它的任何部分,因此检测到它是来自浏览器的Ajax请求而不是通过浏览器操纵的请求是不可靠的
如果您确实想保护您的数据,请强制用户登录并使用会话强制执行。使用会话为用户有权访问的内容设置权限,javascript是一种客户端执行语言。如果javascript可以访问资源,那么user@Musa好的,但在这种情况下,我不希望任何“用户”浏览该页面。只有当它是AJAX调用时,它才应该回显某些内容。@compid似乎是合法的。所以,不可能?@Musa-会话不会在Ajax请求和地址栏请求或view source request中的链接之间更改。PHP配置在很大程度上是不相关的。它取决于告诉客户端请求设置头的JavaScript。没有什么可以阻止用户自己设置。这就是Zend Framework用来检测对it上下文切换器的Ajax请求的方法。谢谢!当你的答案可用时,我会接受你的答案。@Orangepill-一个系统可以提供适当的数据表示。这对安全不起作用。@Quentin谢谢,我已经编辑了答案强制用户登录不会阻止他们看到原始数据。它只是防止匿名用户看到它。(在不允许用户直接访问的情况下,无法将数据提供给浏览器)同意,但如果PHP脚本拒绝处理未登录用户的任何请求,则不会泄漏给匿名用户。我假设一个登录系统在某种程度上被控制,以限制受信任用户的访问。是的,这是一个好主意。但就我而言,我不想实现登录系统。无论如何,谢谢你:)