在php中验证XMLHttpRequest

时间:2011-12-18 17:59:28

标签: php xmlhttprequest

我使用以下代码将数据发送到PHP站点:

if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp= new XMLHttpRequest();
      }
      else
      {// code for IE6, IE5
          xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.open("GET","addEmail.php?email="+escape(email),true);
      xmlhttp.send();
      xmlhttp.close;

有没有办法确保addEmail.php是通过XMLHttpRequest运行的,所以人们不能只是去www.domain.com/addEmail.php?email=some@thing.com让php网站吃他们的电子邮件并在页面上运行了一千个请求?提前致谢

3 个答案:

答案 0 :(得分:16)

用户总是可以直接访问php脚本,但是你可以通过将这个检查添加到php脚本来保护更多:

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest')
{
  //CODE HERE
}

另外,像Eugen Rieck提到的那样,你可以发送一个令牌。

答案 1 :(得分:2)

这根本不可能。

您需要限制服务器上每个IP地址的请求数。

答案 2 :(得分:0)

执行此操作的标准方法是使用包含AJAX代码的页面发送某种(时间相关的)令牌,然后将令牌与AJAX调用一起发送。直接使用AJAX URL的用户将不知道当前的令牌值。