1

我有一个 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 的能力作为一个特性。简而言之,它不能真正被信任。”

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

感谢您的任何帮助,您可以提供!

4

2 回答 2

1

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

由于只有您知道秘密字符串,因此只有您可以创建哈希。使用收到的日期时间在第二个文件中重新创建哈希,并检查发送的哈希是否正确。

来自其他站点的请求将没有您的哈希和日期时间,或者至少不是正确的。

于 2011-01-08T10:31:57.417 回答
1

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

但说实话,这会让黑客的任务更加复杂,但并非不可能。因此,您需要将 HTTPS 添加到等式中,即使这样,客户端计算机上的一个好的 troyan 也会使错误请求成为可能。但在大多数情况下,上述 + HTTPS 将把攻击者赶走。

于 2011-01-08T10:50:21.613 回答