今天看到 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 重要服务被攻破 而被迫退出中国了,你还敢用它?

标签:

相关日志

3 Responses to “禁止浏览器发送 HTTP_REFERRER header 保护私密网站 URL”

  1. vvoodyNo Gravatar Says:

    嘿嘿,我来补充Opera的: Tools-> Preferences-> Advanced-> Network-> Send referrer information 去掉勾选

  2. kangzjNo Gravatar Says:

    这样有的图片怕是看不了了,一些网站 的防盗链就是这么做的

  3. RainuxNo Gravatar Says:

    @kangzj Chromium 是由网页作者指定,Firefox 的扩展是用户自己选择,都不会一刀切的。

Leave a Reply