Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将php文件设置为仅用于AJAX?_Php_Ajax_Jquery - Fatal编程技术网

如何将php文件设置为仅用于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调用, 它们都调用一个文件,名为
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脚本拒绝处理未登录用户的任何请求,则不会泄漏给匿名用户。我假设一个登录系统在某种程度上被控制,以限制受信任用户的访问。是的,这是一个好主意。但就我而言,我不想实现登录系统。无论如何,谢谢你:)