HTML5的contenteditable属性应该是XSS安全吗?

我已经阅读了有关的相关问题div contenteditable, XSS,但其答案并没有强调关于XSS的contenteditable安全问题。特别是关于意外(与内部跨站脚本相比)。当然,我知道我应该清理用户输入服务器端。HTML5的contenteditable属性应该是XSS安全吗?

TL.DR.:我可以肯定的是,用户并不突出风险引入一些外部脚本(即通过从剪贴板粘贴的数据。)通过页面元素被设置contenteditable?规范是否确保粘贴到contenteditable的任何标记在插入到DOM之前都已经过消毒处理?

我注意到,在我试验了两种主要的浏览器,铬/ Chrome和Firefox,这似乎是不可能的意外插入活性元素contenteditable标签。

  • 用户复制DOM元素从一个网页上的选择和它们插入contenteditable元素在其他网站上:对于这样的斯瓦特插入我会想到是例如一个例子。
  • 用户在(在Linux命令行上)echo "<b onclick='alert("XSS");'>click me</b>" | xclip -t text/html -selection "clipboard"并将其粘贴到contenteditable中。

一种有源元件将是类似的东西:

  • 包含含有与内联处理程序如onclick="alert(\"XSS\");"
  • 包含JavaScript的HREF诸如HTML的标记元素一个<script>
  • HTML标记的HTML标记<a href="javascript:alert(\"XSS\")"> click me </a>

现在我的问题是,看到contenteditable似乎有点安全,没有任何正常的XSS矢量被粘贴到,如果这是由设计?

我看过一些specs/refs/whatever在那里既没有明确提到contenteditable应防止任何有源元件被插入到页面的DOM,无论它会被允许。这让我怀疑是否应该使用contenteditable功能,因为我不想冒一些外部JavaScript被插入contenteditable的风险。回答这个问题的核心是contenteditable这个XSS安全。

更新 与此相反的contenteditable属性相似特征文件designMode,似乎是特异性的(见https://www.w3.org/TR/2008/WD-html5-20080610/web-browsers.html#designModeScriptBlocked)有关的javascript被停用(因此防止XSS)。

UPDATE 2 最近的参考/规格上MDN引用是https://html.spec.whatwg.org/multipage/interaction.html#contenteditable 是奇怪淡漠任何保证contenteditable提供到不经由浆料引入的恶意的JavaScript。

回答:

没有标准,它的浏览器一定要坚持,所以每个浏览器都会有自己的处理用户输入的实现。如果有办法,你可以确定用户将会知道如何去做(旧版浏览器通常是最容易受影响的)。这要取决于你清理用户的输入,无论是来自打字,粘贴等(我必须为一个项目执行此操作,因为没有办法依靠它“正常工作”)。

至于将designMode,你链接的部分:

当脚本是在脚本被禁用脚本执行上下文中执行脚本必须什么也不做,什么也不返回(返回值为空)。

因此,例如,启用designMode将禁用由文档中的脚本设置的任何事件处理程序属性,事件侦听器,超时等。

这将使它看起来的designMode让你“安全”,但要记住,规格随着时间的演变,所以没有回去和测试所有不同的浏览器(或至少用户都使用的),你可以从来不确定。

以上是 HTML5的contenteditable属性应该是XSS安全吗? 的全部内容, 来源链接: utcz.com/qa/266311.html

回到顶部