3

我听说 HTTP_REFERER 可以被欺骗。我有 2 个站点,第一个与第二个联系,第二个使用 HTTP_REFERER 验证请求来自第一个。

如果我收到从我的第一个站点到第二个站点的虚假请求,并且我知道没有发出此请求,我应该怎么想?第三个网站正在欺骗所有用户的 http_ref,或者个人正在从他的浏览器设置中欺骗它?我想知道 http_ref 是由客户端/浏览器还是由网站本身设置/欺骗的?

4

2 回答 2

8

它是客户端发送的信息。它通常设置为您从中单击链接的页面。

它也绝对可以被欺骗。您可以通过在 PHP cURL 请求中设置 HEADER 来自己完成。

curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
        'Host: www.google.com',
        'Referer: http://google.com/', 
        'FaKeHEADER: ThisIsFakeButItWillBeSentAnyways'));  

接收服务器将在标头中看到这些内容,即使它从未从 google.com 发送。您还可以欺骗您在标头中看到的所有其他内容(用户代理、cookie 等)。

除非您确切地知道每个来源的每个标题应该是什么样子,否则您将很难检测到欺骗性标题。您可以做的最好的事情是使用 IP 并限制您接受的 Header 类型(例如,如果页面只能使用 GET 请求,则拒绝所有 POST 请求)。即使这样,如果有人想欺骗您,他们也很可能会欺骗您,而您不会知道。

如果您试图保护您的 2 个站点之间的连接,您应该限制连接不仅仅是一个 Header,这根本不安全。

编辑:您甚至可以发送真正的虚假标头。我更新了示例以说明我的意思。一些网站使用自定义(如伪造的)标头来传递身份验证。

于 2011-03-28T01:25:40.310 回答
0

它很容易被客户端欺骗。但是,大多数人不会打扰。在 99% 的情况下,您应该认为这是正确的值,除非您有正当理由不相信(例如,如果您怀疑机器人)。

于 2011-03-28T01:33:08.753 回答