一.基本概念
DOM的全称为Document Object Model,即文档对象模型,DOM通常用于代表在HTML、XHTML和XML中的对象 。使用DOM可以允许程序和脚本动态的访问和更新文档的内容、结构和样式。
通过JavaScript可以重构整个HTML页面,而重构页面或者页面中的某个对象,JavaScript就需要知道HTML文档中所有元素的“位置”。而DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。根据DOM规定,HTML文档中的每一个成分都是一个节点。
DOM规定如下
1.每个HTML标签是一个元素节点;
2.包含在HTML元素中的文本是文本节点;
3.每一个HTML属性是一个属性节点;
4.节点与节点之间都有等级关系;
HTML的标签都是一个个节点,而这些节点组成了DOM的整体结构:节点树,如下图所示。

二.漏洞复现
所谓DOM型xss,指的就是服务器端处理数据阶段Document()方法的跨站脚本,实现起来也比较简单,下面是一段比较简单的DOM型xss实例。
<script>
var temp = document.URL; //获取url
var index = document.URL.indexOf("content=")+4;
var par = temp.substring(index);
document.write(decodeURI(par)); //输入获取内容
</script>
以上代码的意思是获取URL中content参数的值,并且输出,如果输入 http://www.navi.org/dom.html?content=<script>alert(/xss/)</script>,就会产生xss漏洞。
三.漏洞威胁
DOM型xss不像反射型xss与存储型xss一样会与后台交互,只是在服务器处理数据阶段反弹数据,因此属于低危漏洞。