DOM型XSS
DOM Based XSS从效果上来说也是反射型XSS,单独划分出来,是因为它的形成原因比较特别。
通过修改页面的DOM节点形成的XSS称之为DOM Based XSS,看如下代码:
<script>
function test(){
var str = document.getElementById("test").value;
document.getElementById("t").innerHTML="<a href='"+str+"'>testLink<>";
}
</script>
<div id="t"></div>
<input type="text" id="text" value=""/>
<input type="button" id="s" value="write" οnclick="test()"/>
在这里,write
按钮的onclick
事件调用了test()
函数。而在test函数中,修改了页面的DOM节点,通过innerHTML把一段用户数据当做HTML写入到页面中,这就造成了DOM based XSS。
构造数据如下:
’ οnclick=alert(/XSS/) //
输入后,页面代码就变成了:
<a href='' οnclick=alert(/XSS/) //' >testLink</a>
第一个单引号闭合掉原本的单引号,然后插入一个onclick事件,最后用//
注释掉第二个单引号。生成新的链接,脚本就被执行。
相当于
<a href='' οnclick=alert(/XSS/)>testLink</a>
另外,除了构造新事件,还可以闭合掉<a>
标签,并插入一个新的HTML标签。