我知道可能会获取到一个空的HTTP_REFERER。在什么情况下会出现这种情况?如果我获取到一个空的referer,是否意味着用户已更改它?获得空的referer是否与获得null的相同?以及在什么情况下我会获得null的referer?
我知道可能会获取到一个空的HTTP_REFERER。在什么情况下会出现这种情况?如果我获取到一个空的referer,是否意味着用户已更改它?获得空的referer是否与获得null的相同?以及在什么情况下我会获得null的referer?
当最终用户使用时,它可能为空或部分为空。
<meta name="referrer">
标记的页面上单击链接。Referrer-Policy
头的页面上单击链接。rel="noreferrer"
的链接。HTTP_REFERER - 由浏览器发送,指示浏览器查看的最后一个页面!
如果您以任何重要原因信任[HTTP_REFERER],则不应该,因为它可以轻松伪造:
尝试使用这个Firefox扩展,您将能够设置任何标头:
@Master of Celebration:
Firefox:
扩展:refspoof,refontrol ,modify headers,no-referer
完全禁用:选项在about:config下可用,"network.http.sendRefererHeader"并将其设置为0以禁用referer传递。
Google Chrome / Chromium:
扩展:noref,spoofy,external noreferrer
完全禁用:更改~/.config/google-chrome/Default/Preferences或~/.config/chromium/Default/Preferences并设置以下内容:
{
...
"enable_referrers": false,
...
}
或者在快捷方式或命令行中添加 --no-referrers:
google-chrome --no-referrers
Opera:
完全禁用:设置 > 首选项 > 高级 > 网络,取消选中 "发送引荐来源信息"
伪装 Web 服务:
独立的过滤代理(欺骗任何头部):
使用 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)
如果使用新Referrer Policy标准草案,请求来源将不会发送引用页头信息,并且该页也将为空。例如:
<meta name="referrer" content="none">
虽然Chrome和Firefox已经实现了一个草案版本的Referrer Policy,但你应该小心使用它,因为例如Chrome期望使用no-referrer
而不是none
(我也在某些地方看到过never
)。
BalusC的名单很有实力。这个领域经常出现空白是因为用户在代理服务器后面。这类似于在防火墙后面,但略有不同,因此我想为了完整性而提及它。
我发现浏览器的引用实现非常不一致。
例如,带有“download”属性的锚元素在Safari中按预期工作并发送引用,但在Chrome中,Web服务器日志中的引用将为空或为“-”。
<a href="http://foo.com/foo" download="bar">click to download</a>
在Chrome中出现问题 - 没有发送referer。