我听说HTTP_REFERER可能是欺骗性的。我有2个站点,第一个站点与第二个站点联系,第二个站点使用HTTP_REFERER来验证请求是否来自第一个站点。
如果我从第一个网站收到第二个网站的虚假请求而且我知道没有提出此请求,我该怎么想?第三个网站是为所有用户欺骗http_ref,还是个人从浏览器设置中欺骗它?我想知道客户端/浏览器或网站本身是否设置/欺骗了http_ref?
答案 0 :(得分: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请求)。即便如此,如果有人想要欺骗你,那么他们很可能也不会知道。
如果您正在尝试保护两个站点之间的连接,那么您应该使用的不仅仅是一个Header来限制连接,这根本不安全。
编辑:你甚至可以发送真假标题。我更新了示例以显示我的意思。有些网站使用自定义(如假的)标头来传递身份验证。
答案 1 :(得分:0)
客户可以很容易地欺骗它。但是,大多数人都不会打扰。在99%的情况下,您应该认为它是正确的值,除非您有一些不相信的正当理由(例如,如果您怀疑机器人)。