Php 客户端是否设置了HTTP_REFERER

Php 客户端是否设置了HTTP_REFERER,php,security,http-referer,Php,Security,Http Referer,我听说HTTP_REFERER可以被欺骗。我有两个站点,第一个站点联系第二个站点,第二个站点使用HTTP_REFERER验证请求是否来自第一个站点 如果我收到一个从我的第一个站点到第二个站点的虚假请求,并且我知道这个请求没有提出,我该怎么想?第三个网站正在欺骗其所有用户的http_ref,或者某个人正在通过其浏览器设置进行欺骗?我想知道http_ref是由客户端/浏览器设置/欺骗的,还是由网站本身设置/欺骗的?这是客户端发送的信息。它通常设置为单击链接的页面 它也绝对可以被欺骗。您可以通过在PH

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


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

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

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

curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
        'Host: www.google.com',
        'Referer: http://google.com/', 
        'FaKeHEADER: ThisIsFakeButItWillBeSentAnyways'));  
接收服务器将看到标题中的内容,即使它从未从google.com发送。您还可以欺骗头中的所有其他内容(用户代理、cookie等)

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

如果你试图保护你的两个站点之间的连接,你应该限制连接,而不仅仅是一个头,这是不安全的


编辑:你甚至可以发送假标题。我更新了这个例子来说明我的意思。有些网站使用自定义(比如假标题)来传递身份验证

它很容易被客户端欺骗。然而,大多数人都不会介意。在99%的情况下,您应该认为它是正确的值,除非您有合理的理由不这么认为(比如怀疑有机器人)。

是的,对于功能而言,使用它是可以的。为了安全起见,它不应该被使用。如果它是99%,这或多或少是个问题;唉,它接近90%(或者过去是,我上一次检查是在2009年),所以它不是真正的边缘情况。