DOM Based XSS介绍

DOM Based XSS: 通过修改页面的DOM节点形成的XSS。

实例:点击write按钮后,会在当前页面插入一个超链接,其地址为文本框的内容。

在test()函数中,修改了页面的DOM节点。通过innerHTML把一段用户数据当做HTML写入到页面中,这就造成了DOM Based XSS。

 1 <!DOCTYPE html>
 2 <html>
 3 <body>
 4 
 5 <script>
 6 function test(){
 7     var str = document.getElementById("test").value;
 8     document.getElementById("t").innerHTML="<a href ='"+str+"'>testLink</a>";
 9 
10 }
11 </script>
12 
13 <div id = "t"></div>
14 <input type = "test" id = "test" value = ""/>
15 <input type = "button" id = "s" value = "write" onclick="test()"/>
16 
17 </body>
18 </html>

构造如下数据输入: ' onclick=alert(/xss/) //

此时第8行页面代码变成:document.getElementById("t").innerHTML= "<a href = ' ' onclick=alert(/xss/) // '>testLink</a>";

首先用一个单引号闭合掉href的第一个单引号,然后插入一个onclick事件,最后再用注释符”//" 注释掉第二个单引号。之后点击这个新生成的链接,脚本将被执行:

另一种方式:除了构造一个新事件外,还可以选择闭合掉<a>标签,并插入一个新的HTML标签,如输入: ' ><img src=# onerror=alert(/xss2/) />< '

页面代码变成了: 

document.getElementById("t").innerHTML="<a href =' '>< img  src=# onerror = alert(/xss2/) />< '' >testLink</a>";

点击write按钮,脚本被执行:

(使用 onerror 事件是一种老式的标准的在网页中捕获 Javascript 错误的方法。http://www.w3school.com.cn/js/js_onerror.asp)

原文地址:https://www.cnblogs.com/leaf526/p/3619195.html