安全之跨站脚本攻击

要了解跨站脚本攻击,先要了解同源策略
何为同源:
协议名 + 主机名(域名) + 端口相同为同源。
如 http://www.zhengmenbb.com 与 https:///www.zhengmenbb.com不是同源。因为协议名不同。 他与http:///www.zhengmenbb.com:8081也不同,因为端口不同.

同源的两个网页之间共享cookier信息。不同源不共享cookier. 同源的两个网页中的js可以互相调用。当www.zhengmenbb.com/page1.html页中有一个iframe,他的src是www.zhengmenbb.com/page2.html,那么page1可以调用page2中定义的js方法或者变量。page2也是可以调用page1的。

但如果是src是www.163.com的其中一个页面,那么page1就不能调用了。这是由同源策略决定的,它是网络上最基本的保证.

以下是测试代码。 请先参考Tomcat 配置虚拟主机

web1 中的page1.html

<html >
<body>
site1 page1
<iframe src="http://web1.com:8081/page2.html" name="testiFrame" id="testiFrame"></iframe>
</body>
</html>
<script>
function parentMethod() {
alert("parentMethod");
}
</script>
   

web1 中的page2.html

<html>
<script>
function testMethod() {
	parent.parentMethod();
}
</script>
<body>
site1 page1
<a href="#" onclick="testMethod()">click me</a>
</body>
</html>

运行程序你可以发现一切运行正常.
但如果你把page2.html copy到web2中,然后去运行,你会发现。运行不正常了.将出现没有”权限访问”
这中是同源策略在起作用.

那如果不同源之间的js要互相通讯怎么办。目前html5可以利用一些技术实现跨源通信.

同一主域下面的子域是可以实现跨源通信。
如果上面的例子,我们的两个域名修改成web1.zhengmenbb.com,web2.zhengmenbb.com

他还是会出现”权限访问”问题。如果你在page1.html修改成
page1.html

<html >
<body>
site1 page1
<iframe src="http://web2.zhengmenbb.com:8081/page2.html" name="testiFrame" id="testiFrame"></iframe>
</body>
</html>
<script>
document.domain = "zhengmenbb.com"
function parentMethod() {
alert("parentMethod");
}
</script>
   

page2.html修改成:

<html>
<script>
document.domain = "zhengmenbb.com"
function testMethod() {
	parent.parentMethod();
}
</script>
<body>
site1 page1
<a href="#" onclick="testMethod()">click me</a>
</body>
</html>

那么他们之间就可以通讯了.

那么以上的话题和跨站脚本攻击有什么关系呢。
首先来看一个问题: 如果我存储如下内容到数据库<script>alert(1)</script>
如果不做任务处理将会输出到页面,那么页面将会弹出一个框,显示1,这个问题会引起安全问题,这个安全问题就是跨站脚本攻击.

如果www.163.com的邮件列表显示有这个问题。那么我就可以查看到某一个人的邮件列表。步骤如下:
(1):我先去注册一个zmbb.163.com的域名.
(2):然后向一个163邮箱发一个email.其中标题是:
<script>
document.domain = “163.com”
</script>
<iframe src=”http://zmbb.163.com/test.html”></iframe>你好,我想偷看你。
(3): 因为test.html是我自己的,此时,我就可以通过此页面,访问到他的父页面(163的邮件列表页),我可以通过js得到页面上整个文档的html内容,得到后,通过test.html发到我的一个服务后台。当某人来看他email列表时,我就偷偷得到了他的邮件列表

posted @ 2012-10-11 10:08  lvpeng-333  阅读(117)  评论(0)    收藏  举报