这里主要是理解什么是DOM XSS

DOM

文档对象模型(Document Object Model)
image.png
根元素html下面head元素body元素
head元素下面有title body元素下面有a元素,a元素有个属性为href

通过DOM结构,树中的所有节点都可以被JS代码访问获取修改创建删除节点的内容

故如果我们在DOM结构中写入的内容被JS执行,弹窗了是不是就是一种XSS

代码示例

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

getElementById通过id值test获取其元素的值
又通过innerHTMl写入到id为t的元素中

当点击button的触发domxss函数的行为
image.png

成功通过js代码修改了dom节点

XSS

我们在上述中构造的值最终要放入href属性当中
image.png
尝试闭合以后构造JS语句

发现成功调用了JS代码读取出了Cookie

  1. 'onclick=alert(1)//

image.png

image.png

而且我们可以看到DOM xss没有和服务器进行连接
image.png
如果服务端经常使用document.body.innerHTML等函数动态生成html页面,就可能产生这种问题

可能产生位置

document属性中,比如referer,write
window属性中,比如name
location属性中
innerHTML属性中
eval
indexof