2011-03-28 150 views
3

我听说HTTP_REFERER可能被欺骗。我有2个站点,第一个联系第二个站点,第二个站点使用HTTP_REFERER验证请求来自第一个站点。由客户端设置HTTP_REFERER

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

回答

8

这是客户发送的信息。它通常设置为您点击链接的页面。

它也绝对可以被欺骗。您可以通过将头文件设置为PHP cURL请求来完成。

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

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

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

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

编辑:你甚至可以发送真正的假头。我更新了这个例子来展示我的意思。一些网站使用自定义(如假的头)来传递身份验证。

0

它可以很容易地被客户欺骗。但是,大多数人不会打扰。在99%的情况下,你应该认为这是正确的价值,除非你有一些不可信的理由(比如你怀疑一个机器人)。

+3

是的,对于功能来说,使用它是很好的。为了安全起见,不应该使用它。 – Brad 2011-03-28 01:35:38

+0

如果它是99%,这或多或少不是问题;唉,它接近90%(或曾经是,我上次在2009年检查) - 所以这不是一个真正的边缘案例。 – Piskvor 2011-05-09 10:13:53