【问题标题】:Verifying XMLHttpRequest in php在 php 中验证 XMLHttpRequest
【发布时间】:2012-01-23 03:03:44
【问题描述】:

我正在使用以下代码向 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 站点吃掉他们的电子邮件并在页面上运行一千个请求?提前致谢

【问题讨论】:

标签: php xmlhttprequest


【解决方案1】:

这根本不可能。

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

【讨论】:

  • 一个 PHP 基本实现将不胜感激谢谢先生
【解决方案2】:

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

【讨论】:

  • 但是既然 javascript 是可见的,他们不是很容易就能逆向工程吗?
【解决方案3】:

用户始终可以直接访问 php 脚本,但您可以通过在 php 脚本中添加此检查来保护更多:

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

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

【讨论】:

  • 谢谢!,这可能就是我要找的东西.. sidequestion,为什么你有 3x = 检查它是否等于'xmlhttprequest'?
  • === 检查它们是否属于同一类型。使用两个可能就足够了。
猜你喜欢
  • 2012-03-16
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
相关资源
最近更新 更多