有没有人知道类型Text
的DOM Node
是否被浏览器保证不被解释为HTML?是否保证DOM文本节点不被解释为HTML?
更多详情如下。
背景
我建立一个简单的网页评论系统的朋友,我一直在思考XSS攻击。我不认为过滤或转义HTML标签是一个非常优雅的解决方案 - 它太容易想出一个卷积过滤器。基本问题是,我想保证,对于某些内容片段(即随机未经身份验证的网络用户POST的内容),浏览器永不尝试解释或运行内容。
一个平原(文本)开始
浮现在脑海的第一个念头就是使用Content-Type: text/plain
,但有权申请一整页。您可以在页面中间放置一个明文IFRAME
,但它很丑,并且如果用户点击框架,则会产生焦点问题。
的innerText /的textContent/JQuery的
事实证明,有一些特定浏览器(innerText
在IE,textContent
在FF,Safari等)的属性,当集,需要创建一个单个Text
节点。
JQuery的尝试,以避免在特定浏览器的属性差异,通过实现单一功能text(val)
一个跳过浏览器特定的属性,并直接进入document.createTextNode(text)
,其中,因为你可以猜到,创建一个Text
节点。
W3 DOM Text
Node
小号
所以我觉得这是接近我想要的东西,它看起来good-- Text
节点不能有孩子,而且似乎像他们不能被解释为HTML。但是我不能从官方文档中100%确定。
- 接口
Node
:http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1950641247 - 接口
Text
:http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1312295772 textContent
:http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent
从textContent
的部分是特别令人鼓舞,因为它设置,无需解析要么执行说”输入字符串被视为纯文本内容。“但是,对于所有Text
节点或仅设置textContent
的节点,这是基本的吗?这可能看起来像一个愚蠢的狡辩,但它可能很重要,因为IE不支持textContent
(见上文)。
回到身边最初的问题
谁能确认/拒绝,这是否行得通呢?也就是说,一个w3 DOM兼容的浏览器将不会不会将解释为一个Text
节点为HTML,不管内容是什么?我会非常感激这种折磨的小小的不确定性。
谢谢你的时间!
我立足于我的偏执: http://stackoverflow.com/questions/53728/will-html-encoding-prevent-all-kinds-of-xss-attacks 的http://博客。 stackoverflow.com/2008/06/safe-html-and-xss/ – elliot42 2009-01-24 22:58:59