首先由图可知,我们给button的标签设置一个id=btn
然后在script中用window.btn来抓取button的id
观察结果我们发现他将整个标签的内容都抓取了出来。
首先我们来了解一下DOM和window的关系,如果你在HTML中,设定一个有id的元素之后,在js中就可以直接操作,又由于js的作用域规则,就算直接用btn也可以,因为在当前的作用域找到时就会往上找,一路找到window
只需要记一个规范:不需要getE1ementById, 也不需要queryselector ,只要直接用与1d同名的变量去拿,就能得到。
在html 的说明文档中节选两个重点:
1. the value of the name content attribute for all embed, form, 1img , and object elements that have a non. empty name
content attribute
2. the value of the id content atribute for all HTML elements that have a non.empty id content atribute
也就是说除了id可以直接用window存取,embed, form, img和object这四个标签用name也可以操作:
由此我们总结出:我们是有机会通过HTML元素来影响JS的!
而我们可以把这个手法用在攻击上。
那这个利用HTML元素来影响js,就被我们理解成DOM破坏
那基于上面的例子,我们可以想一下如果是两个元素会怎么样;假设有以下代码
if (window. test1. test2) {
eva1(' ' +window. test1.test2)
}
如果我们想利用Dom破环的技巧来执行任意的js,需要解决两个问题:<