禁止浏览器发送 HTTP_REFERRER header 保护私密网站 URL
January 16th, 2010
今天看到 Twitter 上有人讨论浏览器发送 HTTP_REFERRER header 导致民间 Twitter Web 客户端地址被泄露的问题。研究了一下,这个问题的最终解决都需要依靠浏览器,网站自己没有办法强制禁止浏览器发送 HTTP_REFERRER header。
Chrome/Chromium
Chrome/Chromium 的 WebKit 内核最新版支持 HTML5 里的 noreferrer link relation。这个功能允许网页作者在 a 和 area 元素里简单地使用值为 noreferrer 的 rel 属性来禁止浏览器向链接目标发送 HTTP_REFERRER header。例如:
<a href="http://evil.com" rel="noreferrer">Evil</a>
当用户点击这个链接访问 evil.com 时,对方只会收到一个空白的 HTTP_REFERRER header。在 Windows 版的 Chrome 4.0.295.0 dev 上测试通过。
Firefox
Firefox 的扩展 Adaptive Referer Remover 可以禁止指定的 URL 出现在 HTTP_REFERRER header 里。它使用正则表达式来匹配要保护的 URL。普通的 URL 转换成它需要的正则表达式很简单,只需要在前面加 ^ 并把 . 改成 . 即可。例如:
^http://rainux.org
^http://search\.twitter\.com
另一个更简单但比较极端的做法是在 about:config 里将 network.http.sendRefererHeader 设置为 0,这样会完全禁止 Firefox 向任何网站发送 HTTP_REFERRER header。
Opera
Tools-> Preferences-> Advanced-> Network-> Send referrer information 去掉勾选。(感谢 vvoody 补充)
Internet Explorer
别开玩笑了,IE 的漏洞都导致 Google 重要服务被攻破 而被迫退出中国了,你还敢用它?
标签:Twitter
January 16th, 2010 at 23:59
嘿嘿,我来补充Opera的: Tools-> Preferences-> Advanced-> Network-> Send referrer information 去掉勾选
January 18th, 2010 at 14:55
这样有的图片怕是看不了了,一些网站 的防盗链就是这么做的
January 18th, 2010 at 16:14
@kangzj Chromium 是由网页作者指定,Firefox 的扩展是用户自己选择,都不会一刀切的。