【发布时间】:2011-10-16 09:02:49
【问题描述】:
我知道有可能得到一个空的 HTTP_REFERER。在什么情况下会发生这种情况?如果我得到一个空的,是否总是意味着用户更改了它?得到一个空的和得到一个空的一样吗?在什么情况下我也会得到它?
【问题讨论】:
-
当客户端不发送时。
标签: security http-headers cross-domain http-referer referrer-policy
我知道有可能得到一个空的 HTTP_REFERER。在什么情况下会发生这种情况?如果我得到一个空的,是否总是意味着用户更改了它?得到一个空的和得到一个空的一样吗?在什么情况下我也会得到它?
【问题讨论】:
标签: security http-headers cross-domain http-referer referrer-policy
最终用户时它将/可能为空
【讨论】:
HTTP_REFERER - 由浏览器发送,说明浏览器查看的最后一页!
如果您出于任何重要原因信任 [HTTP_REFERER],则不应这样做,因为它很容易被伪造:
试试这个 Firefox 扩展,你可以设置任何你想要的标题:
@庆典大师:
火狐:
扩展: refspoof、refontrol、modify headers、no-referer
完全禁用:该选项在 about:config 中的“network.http.sendRefererHeader”下可用,您希望将其设置为 0 以禁用引用传递。
谷歌浏览器/铬:
扩展: noref、spoofy、external 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’
使用 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)
【讨论】:
Some browsers limit access to not allow HTTP_REFERER to be passed 您能否举一个此类浏览器和/或扩展程序的示例?
BalusC 的清单很可靠。此字段经常显示为空的另一种方式是当用户位于代理服务器后面时。这类似于在防火墙后面,但略有不同,所以为了完整起见,我想提一下。
【讨论】:
如果使用新的Referrer Policy standard draft 来防止将referer 标头发送到请求源,它也将为空。示例:
<meta name="referrer" content="none">
虽然 Chrome 和 Firefox 已经实施了推荐人政策的草案版本,但您应该小心使用它,因为例如 Chrome 需要 no-referrer 而不是 none(我在某处也看到了 never)。
【讨论】:
我发现浏览器引用实现确实不一致。
例如,具有“下载”属性的锚元素在 Safari 中按预期工作并发送引荐来源网址,但在 Chrome 中,引荐来源网址将为空或在网络服务器日志中为“-”。
<a href="http://foo.com/foo" download="bar">click to download</a>
在 Chrome 中已损坏 - 未发送推荐人。
【讨论】: