禁止浏览器发送 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使用 Function.apply.apply() 为 IE 里的原生函数添加 .apply() 方法
December 13th, 2009
IE 里有很多原生的 Javascript 函数实际上都不是一个标准的 Function 对象,例如 window.alert,window.setTimeout 以及 IE8 的 window.console.log 等。在需要对这样的函数进行包装的时候,会因为它们都没有 Function 对象应该有的 .apply() 及 .call() 方法而难以做到。
这段代码为了兼容旧版本没有 console 的浏览器,尝试将 console.log 包装为 $.log,但是基于上述原因它在 IE 里无法执行。
$ = {};
if (console && console.log) {
$.log = function() {
console.log.apply(console, arguments);
};
} else {
$.log = function() {};
}
由于 window 和 console 这样的原生对象都是只读的,所以无法使用类似这样的代码简单地为其添加 .apply() 方法。
console.log.apply = Function.apply;
解决办法是使用 Function.apply.apply() 将 Function.apply 函数对象 apply 到 console.log 上。
$ = {};
if (console && console.log) {
$.log = function() {
Function.apply.apply(console.log, [console, arguments]);
};
} else {
$.log = function() {};
}
这段代码和第一段代码完全等价。
如果觉得不容易理解,可以看看这个 .apply() 函数比较清晰的例子。这两行代码也完全等价。
[1, 2, 3, 4].slice(0, 2); Array.prototype.slice.apply([1, 2, 3, 4], [0, 2]);标签:Javascript
六月真是个好时节啊
June 5th, 2008
Ruby 1.8.7 和 Rails 2.1.0 前两天相继发布。Firefox 3.0 昨天进入 rc2 阶段,并且将在六月中旬发布 3.0 正式版。开发了十五年的 Wine 终于进入 1.0 的 rc 阶段,并且即将发布 1.0 正式版。
看来是时候更新 SCV Selector 了,可惜预想了很久的 rep 版本识别还是没有时间去研究……
标签:Software_软件, Web_Development_织网很爽的 Rails CHM Documentation 2.0.2
May 30th, 2008
delynn 老兄终于发布了他的 Rails CHM Documentation 的 2.0.2 版,再也不用忍受 RailsBrain.com 那个 Rails API with the AJAX flavor 糟糕的目录结构了。
网上流传的所有 Rails 文档都是用 rdoc 从 Rails 源代码里的 RDoc 注释自动生成的,内容都完全一样。但只有这位 delynn 老兄的 Rails CHM Documentation 目录是手工整理的,按照 Module 分类,结构非常清晰。
标签:Ruby on Rails第一次做网站
March 25th, 2005
给朋友的公司做的网站刚刚完工,心中窃喜不已。
接触 HTML 已经是很久以前的事了,却从来不曾做过比一张极其简单的网页更多的东西。听说 CSS 也是在很久以前了,但是在架设/维护我的这个 Blog 之前,对 CSS 的认识也没有超过“能够设置固定大小的漂亮的 9pt 字”这个范围。一直以为自己没有真正的学过 HTML,一直不敢在 Dreamweaver 里闲逛,总觉得他们都是那么深奥和高不可攀。
在答应朋友“只是修改一下页面,添加一些内容”的要求后,我都一直心里没底,不敢随便承诺完工时间。用 DW 看了一番他的网站以前的页面代码,发现这些用表格布局的页面代码糟糕透了。再加上页面设计也不符合我的审美观,如果要改可能要花费很多时间而且还会搞得心情不好 (代码实在太乱) ,想了半天还是决定仿照现有的布局用 DIV + CSS 完全重新做一个。 Read the rest of this entry »
标签:Personal_个人, Web_Development_织网