183

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

4

5 回答 5

311

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

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

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

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

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

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

@庆典大师:

火狐:

扩展: refspoofrefontrol修改标头no-referer

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

谷歌铬/铬:

扩展: noref , spoofy ,外部 noreferrer

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

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

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

google-chrome --no-referrers

歌剧:

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

欺骗网络服务:

http://referer.us/

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

隐私

使用 wget 时欺骗 http_referer

'--referer=url'</p>

使用 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)
于 2011-07-30T02:16:48.697 回答
11

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

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

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

于 2015-03-03T15:49:10.107 回答
9

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

于 2011-07-30T04:15:44.473 回答
0

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

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

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

在 Chrome 中坏了 - 没有发送推荐人。

于 2019-07-22T05:43:24.920 回答