我知道有可能得到一个空的 HTTP_REFERER。在什么情况下会发生这种情况?如果我得到一个空的,是否总是意味着用户更改了它?得到一个空的和得到一个空的一样吗?在什么情况下我也会得到它?
5 回答
当最终用户时,它将/可能为空
- 在浏览器地址栏中输入站点 URL。
- 通过浏览器维护的书签访问该站点。
- 作为窗口/选项卡中的第一页访问该站点。
- 单击外部应用程序中的链接。
- 从 https URL 切换到 http URL。
- 从 https URL 切换到不同的 https URL。
- 安装了安全软件(防病毒/防火墙/等),从所有请求中剥离引荐来源。
- 位于从所有请求中剥离引荐来源网址的代理后面。
- 以编程方式访问该站点(例如curl),而无需设置引荐来源标头(搜索机器人!)。
HTTP_REFERER - 由浏览器发送,说明浏览器查看的最后一页!
如果您出于任何重要原因信任 [HTTP_REFERER],则不应这样做,因为它很容易被伪造:
- 一些浏览器限制访问不允许传递 HTTP_REFERER
- 在地址栏中键入地址不会传递 HTTP_REFERER
- 打开新的浏览器窗口不会传递 HTTP_REFERER,因为 HTTP_REFERER = NULL
- 有一些浏览器插件出于隐私原因阻止它。一些防火墙和 AV 会这样做。
试试这个 Firefox 扩展,你可以设置任何你想要的标题:
@庆典大师:
火狐:
扩展: refspoof,refontrol,修改标头,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
歌剧:
完全禁用:设置 > 首选项 > 高级 > 网络,并取消选中“发送推荐人信息”
欺骗网络服务:
独立过滤代理(欺骗任何标头):
使用 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)
如果使用新的Referrer Policy 标准草案来防止将 referer 标头发送到请求源,它也将为空。例子:
<meta name="referrer" content="none">
尽管 Chrome 和 Firefox 已经实施了推荐人政策的草案版本,但您应该小心它,因为例如 Chrome 期望no-referrer
而不是none
(我也在never
某处看到过)。
BalusC 的名单很可靠。此字段经常显示为空的另一种方式是当用户位于代理服务器后面时。这类似于在防火墙后面,但略有不同,所以为了完整起见,我想提一下。
我发现浏览器引用实现确实不一致。
例如,具有“下载”属性的锚元素在 Safari 中按预期工作并发送引荐来源网址,但在 Chrome 中,引荐来源网址为空或 Web 服务器日志中的“-”。
<a href="http://foo.com/foo" download="bar">click to download</a>
在 Chrome 中坏了 - 没有发送推荐人。