【问题标题】:In what cases will HTTP_REFERER be empty在什么情况下 HTTP_REFERER 会为空
【发布时间】:2011-10-16 09:02:49
【问题描述】:

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

【问题讨论】:

  • 当客户端不发送时。

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


【解决方案1】:

最终用户时它将/可能为空

  • 在浏览器地址栏中输入了站点 URL。
  • 通过浏览器维护的书签访问了该网站。
  • 在窗口/选项卡中作为第一页访问了该站点。
  • 点击了外部应用程序中的链接。
  • 从 https URL 切换到 http URL。
  • 从 https URL 切换到不同的 https URL。
  • 已安装安全软件(防病毒/防火墙/等),可从所有请求中去除引荐来源网址。
  • 位于从所有请求中去除引荐来源网址的代理后面。
  • 以编程方式访问了该网站(例如,curl),但未设置引荐来源标头(搜索机器人!)。

【讨论】:

  • 您可能想要添加“当用户从安全 (HTTPS) 页面转换到不安全页面时”。
  • "在窗口/选项卡中作为第一页访问了该站点。"即使是通过单击链接并在新窗口/标签中打开它?你确定吗?那将是浏览器非常错误的行为
  • 另见此处stackoverflow.com/questions/21922143/… 对此的例外情况
  • “从 https URL 切换到不同的 https URL”。你确定吗? :\
  • 默认情况下,从 HTTPS URL 切换到不同的 HTTPS URL 会设置完整的引用。但是,可以覆盖此默认策略。 w3.org/TR/referrer-policy
【解决方案2】:

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

如果您出于任何重要原因信任 [HTTP_REFERER],则不应这样做,因为它很容易被伪造:

  1. 某些浏览器限制访问不允许通过 HTTP_REFERER
  2. 在地址栏中输入地址不会通过 HTTP_REFERER
  3. 打开新的浏览器窗口不会传递HTTP_REFERER,因为HTTP_REFERER = NULL
  4. 有一些浏览器插件出于隐私原因阻止它。一些防火墙和 AV 会这样做。

试试这个 Firefox 扩展,你可以设置任何你想要的标题:

@庆典大师:

火狐:

扩展: refspoofrefontrolmodify headersno-referer

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

谷歌浏览器/铬:

扩展: norefspoofyexternal noreferrer

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

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

或者简单地将 --no-referrers 添加到快捷方式或在 cli 中:

google-chrome --no-referrers

歌剧:

完全禁用:设置>首选项>高级>网络,并取消选中“发送推荐人信息”

欺骗网络服务:

http://referer.us/

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

Privoxy

使用 wget 时欺骗 http_referer

‘--referer=url’

使用 curl 时欺骗 http_referer

-e, --referer

使用 telnet 欺骗 http_referer

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)

【讨论】:

  • Tamper Data 是另一个值得一看的 Firefox 扩展,如果你想改变引荐来源值。
  • 我一直在努力记住它的名字。但我的记忆背叛了我。谢谢:)
  • @nix Some browsers limit access to not allow HTTP_REFERER to be passed 您能否举一个此类浏览器和/或扩展程序的示例?
  • @MasterofCelebration 添加了在我的答案中欺骗 http_referer 的方法。
  • 不要使用referer.us来欺骗/隐藏您的推荐人!它does not work 会泄露您的信息。目前唯一有效的服务是这个免费的hide referrer 服务。
【解决方案3】:

BalusC 的清单很可靠。此字段经常显示为空的另一种方式是当用户位于代理服务器后面时。这类似于在防火墙后面,但略有不同,所以为了完整起见,我想提一下。

【讨论】:

    【解决方案4】:

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

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

    虽然 Chrome 和 Firefox 已经实施了推荐人政策的草案版本,但您应该小心使用它,因为例如 Chrome 需要 no-referrer 而不是 none(我在某处也看到了 never)。

    【讨论】:

    【解决方案5】:

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

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

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

    在 Chrome 中已损坏 - 未发送推荐人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      相关资源
      最近更新 更多