Javascript DOM文本节点是否保证不会被解释为HTML?

Javascript DOM文本节点是否保证不会被解释为HTML?,javascript,jquery,dom,xss,Javascript,Jquery,Dom,Xss,是否有人知道类型为Text的DOM节点是否保证不会被浏览器解释为HTML 更多细节如下 背景 我正在为一个朋友构建一个简单的web评论系统,我一直在考虑XSS攻击。我不认为过滤或转义HTML标记是一个非常优雅的解决方案——它太容易产生一个会滑过过滤器的卷积。基本问题是,我想保证,对于某些内容(即随机未经验证的web用户发布的内容),浏览器从不尝试解释或运行内容 纯(文本)开头 首先想到的是使用内容类型:text/plain,但这必须适用于整个页面。你可以在页面的中间放置一个明文 iFrAMe,但

是否有人知道类型为
Text
的DOM
节点
是否保证不会被浏览器解释为HTML

更多细节如下

背景

我正在为一个朋友构建一个简单的web评论系统,我一直在考虑XSS攻击。我不认为过滤或转义HTML标记是一个非常优雅的解决方案——它太容易产生一个会滑过过滤器的卷积。基本问题是,我想保证,对于某些内容(即随机未经验证的web用户发布的内容),浏览器从不尝试解释或运行内容

纯(文本)开头

首先想到的是使用
内容类型:text/plain
,但这必须适用于整个页面。你可以在页面的中间放置一个明文<代码> iFrAMe<代码>,但是它很丑陋,如果用户点击这个框架,它会产生焦点问题。

innerText/textContent/JQuery

事实证明,存在一些特定于浏览器的属性(IE中的
innerText
,FF、Safari等中的
textContent
),设置这些属性后,需要创建单个
Text
节点

JQuery试图通过实现一个函数
text(val)
来避免浏览器特定属性之间的差异,该函数跳过浏览器特定属性并直接转到
document.createTextNode(text)
,您可以猜到,它创建了一个
text
节点

W3 DOM
Text
Node
s

所以我认为这很接近我想要的,它看起来很好--
Text
节点不能有子节点,而且它们似乎不能被解释为HTML。但从官方文件来看,我不是100%肯定

  • 接口
    节点
  • 界面
    文本
  • textContent
textContent
中的部分特别令人鼓舞,因为它说“在设置时,也不执行解析,输入字符串被视为纯文本内容。”但这是所有
Text
节点的基础,还是仅设置
textContent
的节点的基础?这似乎是一个愚蠢的诡辩,但可能很重要,因为IE不支持
textContent
(见上文)

回到最初的问题

有人能确认/拒绝这一点吗?也就是说,兼容w3 DOM的浏览器永远不会将
文本
节点解释为HTML,无论内容是什么?如果能解决这个令人痛苦的小不确定性,我将不胜感激

谢谢你抽出时间

我不认为过滤或转义HTML标记是一个非常优雅的解决方案——它太容易产生一个会滑过过滤器的卷积


这是绝对不真实的,过滤>到和<到将完全停止任何HTML注入。

是的,这一点得到了证实,无论它是什么浏览器,该浏览器都会有严重缺陷。渲染除文本以外的任何内容的文本节点都是矛盾的。通过使用document.createTextNode(“一些字符串”);并附加该节点,字符串保证呈现为文本

我的妄想是建立在:@惊讶\错了。还有许多其他注入技术,从编码技巧到属性注入、JavaScript、CSS等等