文档对象模型 Document Object Model(DOM)是一个与平台、编程语言不相干的接口,允许程序或脚本动态地访问和更新文档内容、布局和样式,处理后的结果会成为展示页面的一部分。 DOM 型 XSS 其实是一种特殊范例的反射型 XSS,也被称作本地跨站,它是基于 DOM 文档对象模型的一种漏洞。DOM XSS 和反射型 XSS、存储型 XSS 的区别在于 DOM XSS 代码并不需要服务器参与,出发 XSS 靠的是浏览器的 DOM 解析,完全是客户端的事情。
DOM 中 有很多对象,其中一些对象可以被用户所操纵,如 url,location 等。客户端的脚本程序可以通过 DOM 来动态地检查和修改页面内容,它不依靠于提交数据到服务器端,而是从客户端取得 DOM 中的数据后并在本地实行,因此仅从服务器端是没有办法防御 DOM 型 XSS 漏洞的,如若 DOM 中的数据没有经过严格的验证,便会产生基于 DOM 的 XSS 漏洞。
基于 DOM 的 XSS 是反射的特例,其中 JavaScript 隐藏在 URL 中,并在其呈现时由页面中的 JavaScript 取出,而不是在提供服务时嵌入到页面中。 总结:基于 DOM 的 XSS 的攻击场景和反射性 XSS 是一样的,唯一差别的就是,基于 DOM 的 XSS,不是发生在服务器端,而是直接发生在了浏览器那里。这可以使其比其他攻击更隐蔽,并且监控页面正文的 WAF 或其他防护检测不出恶意内容。