有哪些用例以及是否已被弃用?正如我在http://groups.google.com/group/envjs/browse_thread/thread/6c22d0f959666009/c389fc11537f2a97中发现的那样,它是"非标准的,不受任何现代浏览器的支持"......
编辑:
关于document.implementation在http://javascript.gakaa.com/document-implementation.aspx:
返回对W3C DOMImplementation对象的引用,该对象在有限的程度上表示构成包含浏览器的文档的环境,用于我们的目的.通过对象的方法,您可以查看浏览器报告支持的DOM模块.此对象还是在当前文档树之外创建虚拟W3C Document和DocumentType对象的网关.因此,在Netscape 6中,您可以使用document.implementation属性作为为外部XML文档生成非渲染文档的开始.有关方法及其浏览器支持的详细信息,请参阅DOMImplementation对象.
鉴于它提供createHTMLDocument了在当前文档树之外创建非渲染文档的方法(例如),是否可以安全地提供可能包含某些XSS的不受信任的第三方HTML输入?我问,因为我想createHTMLDocument用于第三方HTML输入的遍历目的.可能是其中一个用例?
Esa*_*ija 13
我总是使用它,因为它不会向图像发出请求,执行脚本或影响样式:
function cleanHTML( html ) {
var root = document.implementation.createHTMLDocument().body;
root.innerHTML = html;
//Manipulate the DOM here
$(root).find("script, style, img").remove(); //jQuery is not relevant, I just didn't want to write exhausting boilerplate code just to make a point
return root.innerHTML;
}
cleanHTML( '<div>hello</div><img src="google"><script>alert("hello");</script><style type="text/css">body {display: none !important;}</style>' );
//returns "<div>hello</div>" with the page unaffected
Run Code Online (Sandbox Code Playgroud)
是.您可以使用此方法加载不受信任的第三方内容,并在将其包含在您自己的文档中之前将其删除危险的标记和属性.有一些很好的研究结合了这个技巧,在http://blog.kotowicz.net/2011/10/sad-state-of-dom-security-or-how-we-all.html中有描述.
然而,Esailija记录的技术是不够的.您还需要删除大多数属性.攻击者可以将恶意或onmouseover元素设置为恶意JS.style属性可用于包含运行恶意JS的CSS.iframe和其他嵌入标签也可能被滥用.在https://html5sec.org/xssme/xssme2查看源代码,查看此技术的一个版本.