2011-12-18 80 views
3

我使用下面的代码将数据发送到一个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/[email protected]使php网站吃掉他们的电子邮件并在网页上运行一千个请求?在此先感谢

+0

http://stackoverflow.com/questions/1953954/detecting-ajax-in-php-and-making-sure-request-was-from-my-own-website – 2011-12-18 18:09:32

回答

14

的用户总是能够直接访问PHP脚本,但可以保护更多的是有点增加此项检查到PHP脚本:

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

此外,像尤金·里克提到的,你可以发送令牌。

+0

谢谢!,那可能是我在找的.. sidequestion,为什么你有3x =检查它是否等于'xmlhttprequest'? – DrLime2k10 2011-12-18 18:17:01

+1

===检查它们是否属于同一类型。使用两个可能就足够了。 – Sweam 2011-12-18 18:28:44

1

这是根本不可能的。

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

+0

如果那是真的,那么谢谢你。 – DrLime2k10 2011-12-18 18:02:56

+0

一个PHP的基本实现将不胜感激先生 – 2016-09-15 13:10:08

0

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

+1

但由于javascript是可见的,他们是不是很容易能够逆向工程呢? – DrLime2k10 2011-12-18 18:14:46