Dom Clobbering
一些预备的知识:
window:
是浏览器中全局对象(Global Object)。
所有全局变量、函数、内置对象(如 alert, setTimeout, console)都挂在 window 上。
你可以写 window.alert("Hello") 或直接写 alert("Hello") —— 效果一样。
在浏览器环境中,this 在全局作用域下也指向 window。
document:
是 window 对象的一个属性:window.document。
代表当前网页的 HTML 文档对象模型(Document Object Model)。
通过它,JavaScript 可以访问、修改页面中的所有元素(比如 document.getElementById(), document.querySelector())。
它也是 DOM 操作的核心入口。
原理:
浏览器为了兼容旧式 Web 表单行为,会自动将带有 id 或 name 属性的 HTML 元素挂载到 window 或 document 对象上,这样就可以做到污染htmlDOM的一些对象,不过局限是无法污染一些明文赋值的对象
例:
<img id=x>
<img name=y>
<script>
console.log(x); //<img id=x>
console.log(y); //<img id=y>
console.log(document.x); //<img id=x>
console.log(document.y); //undefined
console.log(window.x); //<img id=x>
console.log(window.y); //<img id=y>
</script>
需要注意的是,id都会绑定到window 和 document 对象,而name仅部分(,