保护从ajax调用的php脚本的执行

保护从ajax调用的php脚本的执行,php,jquery,ajax,Php,Jquery,Ajax,可能重复: 我从jquery向位于我自己服务器中的php脚本发出ajax调用,比如:$.ajax({url:'ajax.php',.. 有没有办法直接保护这个文件的执行?我的意思是,一些IF语句只允许在调用文件ajax.php时才开始代码,比如说在origin.html中编写jquery脚本,而不是直接调用文件 谢谢你的帮助 if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_R

可能重复:

我从jquery向位于我自己服务器中的php脚本发出ajax调用,比如:
$.ajax({url:'ajax.php',..

有没有办法直接保护这个文件的执行?我的意思是,一些IF语句只允许在调用文件ajax.php时才开始代码,比如说在origin.html中编写jquery脚本,而不是直接调用文件

谢谢你的帮助

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
 // code that has to be executed in response to ajax req.
}

ref:

如果您确保页面仅使用
$\u POST[''']
而不是
$\u GET[''']/$\u REQUEST[''']
变量接收传递的变量,则可以作为第一道防线


这是因为帖子更难伪造,变量不能通过URL直接在代码中传递,比如
http://website.com?variable=hacked

如果您想要100%的确定性,那么您必须对此进行某种身份验证。一种选择是使用ajax脚本将页面中的随机密钥存储到数据库中然后将该密钥传递到ajax.php文件。在ajax文件中,检查密钥是否在数据库中。如果是,请运行脚本,删除该密钥。如果密钥现在在数据库中,则它不是有效的请求。

这很容易伪造,因此依赖这种方式不是100%安全的。