有关DOM XSS的一点思考
2016-08-30 21:26
260 查看
前段时间发现了某站的一个DOM XSS漏洞,发到补天说无法复现,我开始琢磨其中的问题。
我们首先大致还原一下场景:
例子一:
然后,我们用chrome在本地打开这个网页,并在地址后面加上
为什么? 因为chrome对#之后的部分不进行任何的urlencode处理,但是火狐就会进行编码,所以以上弹窗在chrome及大多数浏览器下都能实现。
但是我们换个输出方式呢:
例子二:
结果还会弹窗吗?答案是不会,chrome虽然没有对其进行urlencode编码,但是却这个脚本却会被Chrome XSS Filter拦截,按F12可以看到错误报告。只是输出的语句不同,为什么却有这个区别呢?document.write这个语句是一般的文本输出,我猜想Chrome对innerHTML这个语句的限制不会有这么严格,顾名思义,人家这个语句的名字就可以看出来是为了输出HTML标签的,浏览器或许为了保证正常的DOM解析而没有对它进行太过严格的过滤,这只是我的一个猜想。
我们继续研究第一个例子,这次我们在地址后面加上
我们按F12查看源代码,发现
总结一下,第一个例子中的漏洞应该是确实存在的,但只是不能用
我们首先大致还原一下场景:
例子一:
<!DOCTYPE html> <html> <head> <title>xss test</title> </head> <body> <div id="xss"> </div> </body> <script type="text/javascript"> var a = document.location.href; document.getElementById("xss").innerHTML="<a href="+a+">test</a>"; </script> </html>
然后,我们用chrome在本地打开这个网页,并在地址后面加上
#"><img src=@ onerror=alert(1)>,刷新页面,弹窗了。
为什么? 因为chrome对#之后的部分不进行任何的urlencode处理,但是火狐就会进行编码,所以以上弹窗在chrome及大多数浏览器下都能实现。
但是我们换个输出方式呢:
例子二:
<!DOCTYPE html> <html> <head> <title>xss test</title> </head> <body> </body> <script type="text/javascript"> var a = document.location.href; document.write("<a href="+a+">test</a>"); </script> </html>
结果还会弹窗吗?答案是不会,chrome虽然没有对其进行urlencode编码,但是却这个脚本却会被Chrome XSS Filter拦截,按F12可以看到错误报告。只是输出的语句不同,为什么却有这个区别呢?document.write这个语句是一般的文本输出,我猜想Chrome对innerHTML这个语句的限制不会有这么严格,顾名思义,人家这个语句的名字就可以看出来是为了输出HTML标签的,浏览器或许为了保证正常的DOM解析而没有对它进行太过严格的过滤,这只是我的一个猜想。
我们继续研究第一个例子,这次我们在地址后面加上
#"><script>alert(1)</script>,再次刷新,会弹窗吗?答案是不会。
我们按F12查看源代码,发现
<script></script>已经被视为标签了,但脚本内容却没有执行,很显然被XSS Filter拦截了,看来谷歌的这个东西对DOM XSS还是有一点作用的,明显的标签的确逃不过。
总结一下,第一个例子中的漏洞应该是确实存在的,但只是不能用
<script>标签触发,我不明白补天为什么会说无法复现,或许chrome版本问题吧。
相关文章推荐
- 有关recv端数据流分割问题的一点思考
- 被忽视的Compaction策略-有关NoSQL Compaction策略的一点思考
- 有关“非计算机专业如何转行做程序员”的一点思考
- 有关假期学习的一点思考
- 有关“非计算机专业如何转行做程序员”的一点思考
- 有关STL中的容器和MFC的集合类型构造函数区别的一点思考
- 有关STL中的容器和MFC的集合类型构造函数区别的一点思考
- 由Bug延伸的一点有关“兼容与重构”思考
- 有关STL中的容器和MFC的集合类型构造函数区别的一点思考
- 有关二分法的一点思考
- 有关系统性能优化的一点思考
- 有关校园招聘的一点思考
- 有关校园招聘的一点思考
- 关于XSS的一点思考
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- 有关C#中in.Parse()和int.TryParse()的一点思考
- 有关生活的一点讨论
- 有关onpropertychange事件的一点小发现!
- 关于工作责任的一点思考