Webkit下最无敌的跨大域方案

今天我神奇的发现,现阶段基于webkit内核的浏览器(Chrome、Safari等),通过document.domain,可以将domain设置到最后一级(最后一个点之后的内容)。举例说明:

  1. www.qgy18.com可以设置domain为“com”,不能是“cn”等其它内容;
  2. www.aoao.org.cn可以设置domain为“cn”,不能是“com”等其它内容;
  3. www.imququ.com.(注意后面的.)可以设置domain为“”,不能是“com”、“cn”等等其它内容;

这能干嘛呢?显然,只要两个域名有同样的domain,就可以轻易的跨域通讯了。那么在webkit下,只要两个域名后缀一样,例如都为com或者都为空,通过这种方式可以轻松跨域了。

我把这个问题发在QWrap群里讨论,有人说这是Webkit内核的一个feature,用来方便开发者实现跨大域。我认为这是bug,因为,虽说很少有人会把自己的网站domain设置为com,但是对于黑客来说,他如果在你网站做这件事情,那你的网站跟他的站点就成一家人了,这种行为也不容易被发现。

对于Firefox、IE和Opera,都有域名后缀黑名单,在黑名单里的字符串,是不可以当document.domain的。例如com.cn,com,gov.cn等等。所以不会有这么神奇的事情,当然www.gov.cn也会比较悲剧,因为它的domain也不能设置为gov.cn。

DEMO:http://o.qgy18.com/tt.html使用webkit内核访问已经无法访问)

update @ 2012-03-03:Sogili同学指出,这个问题已经有人提交给chromium,但他们不认为这是安全漏洞,解释是:

It's not a security vulnerability, really, because no self-respecting web page should ever set document.domain = "com". It is a vulnerability of the site if that is the case.

That said, other browsers do it as precaution, and we should too. Nobody has picked it up because the webkit plumbing it needs is onerous.

我个人觉得,即使这不是bug,至少也是一个可以改进的点,有能力的同学不妨去fix下~

附:Mozilla的Public Suffix List

本文链接:参与评论 »

--EOF--

提醒:本文最后更新于 1739 天前,文中所描述的信息可能已发生改变,请谨慎使用。

专题「浏览器」的其他文章 »

Comments