如何可靠地检查我的服务文件的请求是否来自我的网站?

时间:2011-01-08 10:27:53

标签: php ajax security http-referer

我有一个service.php类,用于从我的网站为AJAX调用提供服务。为了防止其他人使用PHP CURL访问服务,我通常会检查请求是否来自mysite,如果不是那么只是重定向到我的主页,例如。

if($_SERVER['HTTP_REFERER'] != "http://www.mysite.com"){
   header('location: http://www.mysite.com');
   exit;
}

我读了PHP圣经:

  

http://www.php.net/manual/en/reserved.variables.server.php

  

“并非所有用户代理都会设置此功能,有些用户可以将HTTP_REFERER修改为功能。简而言之,它无法真正被信任。”

因此,如果此方法不可靠,我的问题是如何可靠地检查对我的服务文件的请求是否来自我的网站?

感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:1)

你不能轻易地想到。你可以做的是让你自己的文件总是张贴某种密码。假设您发送了一些数据(日期时间?),以及"datetime+secretstring"

的哈希值

只有你知道secretstring,只有你可以创建哈希。使用收到的日期时间在第二个文件中重新创建哈希,并检查发送的哈希值是否正确。

来自其他网站的请求不会包含您的哈希和日期时间,或者至少不是正确的。

答案 1 :(得分:1)

您需要创建一个小会话cookie,其中包括页面请求的时间,请求者的IP以及一些不时变化的秘密字符串(即有效一小时左右)。 cookie必须加密。现在当进行AJAX调用时,你检查cookie,比较IP,检查秘密字符串并采取相应的行动。

但说实话,这将使黑客的任务变得更加复杂,但并非不可能。因此,您需要在等式中添加HTTPS,即使这样,客户端计算机上的一个好的特洛伊也会提出错误的请求。但对于大多数情况,上述+ HTTPS会驱使攻击者离开。