如何保护ajaxRequest.open php脚本

时间:2010-10-09 20:09:02

标签: php ajax security

我是使用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);

感谢您的回答。

5 个答案:

答案 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...');