我是使用AJAX的新手,我只是按照教程从我的数据库中使用AJAX检索一些信息并在页面上输出。有一行我称之为php脚本,这是进行数据库查询的地方,结果被回显。我有点担心,因为文件名在前端是可见的,并且它的唯一目的是直接输出数据库结果,它可能会带来安全问题。有没有办法保护该文件,并确保它只在通过ajax脚本调用时运行查询?
这是有问题的ajax代码(请注意“somefile.php”行):
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
var ajaxResponse = ajaxRequest.responseText;
element.innerHTML = '<h2>' + ajaxResponse + '</h2>';
}
}
ajaxRequest.open("GET", "somefile.php", true);
ajaxRequest.send(null);
感谢您的回答。
答案 0 :(得分:1)
不,没有。任何您信任客户端JavaScript的东西,您信任用户。
如果您具有身份验证/授权,则表示您信任您授权的用户。如果你不这样做,那么你相信每个人和他们的机器人。
答案 1 :(得分:1)
将您的PHP代码放入此检查中:
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
/* Your code here */
}
所有ajax请求都有此标头集。因为所有这些也可能是伪造的,所以总是不相信来自客户端的任何内容,过滤/白名单传入的请求参数并使用预准备语句来处理您的数据库。
答案 2 :(得分:0)
您必须担心ajaxResponse
中存储的xss。您可以通过在将数据放入数据库之前或在ajax响应中打印之前对数据执行htmlspeicalchars($var,ENT_QUOTES);
来避免这种情况。
答案 3 :(得分:0)
我解决了它如下:
if($_SERVER['HTTP_REFERER'] == 'http://' . $_SERVER['SERVER_NAME'] . '/mydir/myscriptwithajaxcall.php')
// do something
else
echo 'Restricted Access';
然后php脚本只能在ajax调用之后执行,如果它来自特定脚本(同一个地方)。 注意:我使用会话和常量进行测试但不起作用:/
答案 4 :(得分:0)
我已经尝试了几种方法来保护被叫php文件免受直接访问,这项工作:
if($_SERVER['PHP_SELF'] == $_SERVER['REQUEST_URI'])
exit('This file can not be accessed directly...');