在什么情况下HTTP_REFERER将为空

时间:2011-07-30 02:12:49

标签: security http http-headers cross-domain http-referer

我知道可以获得一个空的HTTP_REFERER。在什么情况下会发生这种情况?如果我得到一个空的,它是否总是意味着用户改变了它?获得一个空的一个与获得一个空的一样?在什么情况下我也能得到它?

5 个答案:

答案 0 :(得分:236)

当最终用户

时它/可能是空的
  • 在浏览器地址栏中输入了网站网址。
  • 通过浏览器维护的书签访问该网站。
  • 在窗口/标签页中作为第一页访问了该网站。
  • 点击了外部应用程序中的链接。
  • 从https网址切换为http网址。
  • 从https网址切换到其他https网址。
  • 安装了安全软件(防病毒软件/防火墙/等),可以从所有请求中删除引荐来源。
  • 位于代理商的后面,代理商会从所有请求中删除引荐来源。
  • 以编程方式访问网站(例如,curl),而不设置引荐来源标头(searchbots!)。

答案 1 :(得分:30)

HTTP_REFERER - 由浏览器发送,说明浏览器查看的最后一页!

如果您因任何重要原因信任[HTTP_REFERER],则不应该,因为它可以轻易伪造:

  1. 某些浏览器限制访问不允许传递HTTP_REFERER
  2. 在地址栏中输入地址不会传递HTTP_REFERER
  3. 打开一个新的浏览器窗口将无法传递HTTP_REFERER,因为HTTP_REFERER = NULL
  4. 有一些浏览器插件,出于隐私原因阻止它。一些防火墙和AV可以做到。
  5. 尝试使用此Firefox扩展程序,您将能够设置所需的任何标题:

    @Master of Celebration:

    Firefox:

    扩展程序: refspoofrefontrolmodify headersno-referer

    完全禁用:该选项在about:config“network.http.sendRefererHeader”下可用,并且您希望将其设置为0以禁用引用传递。

    Google Chrome / Chromium:

    扩展程序: norefspoofyexternal noreferrer

    完全禁用: Chnage~ / .config / google-chrome / Default / Preferences或〜/ .config / chromium / Default / Preferences并设置:

    {
       ...
       "enable_referrers": false,
       ...
    }
    

    或者只是将--no-referrers添加到快捷方式或cli中:

    google-chrome --no-referrers
    

    <强>歌剧:

    完全停用:设置&gt;偏好&gt;高级&gt;网络,取消选中“发送推荐人信息”

    欺骗网络服务:

    http://referer.us/

    独立过滤代理(欺骗任何标头):

    Privoxy

    使用wget时隐藏http_referer

    “ - 引荐= URL”

    使用curl时欺骗http_referer

    -e, - referer

    欺骗http_referer和telnet

    telnet www.yoursite.com 80 (press return)
    GET /index.html HTTP/1.0 (press return)
    Referer: http://www.hah-hah.com (press return)
    (press return again)
    

答案 2 :(得分:9)

BalusC的名单很稳固。此字段经常显示为空的另一种方式是当用户位于代理服务器后面时。这类似于防火墙后面但略有不同所以我想为了完整性而提及它。

答案 3 :(得分:6)

如果使用新的Referrer Policy standard draft来阻止将referer标头发送到请求源,它也将为空。例如:

<meta name="referrer" content="none">

虽然Chrome和Firefox已经实施了推荐人政策的草稿版本,但您应该小心谨慎,因为例如Chrome需要no-referrer而不是none(我也见过{{1}某处)。

答案 4 :(得分:0)

我发现浏览器引用程序的实现确实不一致。

例如,具有“下载”属性的锚元素可在Safari中按预期方式工作并发送引荐来源网址,但在Chrome浏览器中,引荐来源网址将为空或网络服务器日志中的“-”。

<a href="http://foo.com/foo" download="bar">click to download</a>

在Chrome中损坏-未发送引荐来源。