HTML5的内容可编辑属性应该是XSS安全的吗?



我已经阅读了有点相关的问题divdiv,xss,但它的答案并没有太大地介绍有关可满足的XSS saftey。特别是关于意外的(与跨场施法相比)。当然,我知道我应该对用户输入服务器端进行消毒。

tl.dr。:我可以确定用户不承担通过设置的页面元素的 contenteditable来引入某些外部脚本(即通过从剪贴板粘贴的数据)引入某些外部脚本的风险?规格是否确保在插入DOM之前对可满足的任何标记进行消毒?

我注意到,在我测试的两个主要浏览器上,Chromium/Chrome和Firefox,似乎不可能意外地将Active Elements 插入contenteditable标签中。我会想象的这样的加速插入的一个示例:

  • 用户从一个网页中复制了DOM元素的选择,并将其插入另一个站点上的contenteditable元素中。
  • 用户(在Linux命令行)echo "<b onclick='alert("XSS");'>click me</b>" | xclip -t text/html -selection "clipboard"并将其粘贴到contenteditable中。

an 活动元素将是:

  • html标记包含 <script>
  • html标记包含带有内联操件的元素,例如 onclick="alert("XSS");"
  • HTML标记包含JavaScript HREF,例如<a href="javascript:alert("XSS")"> click me </a>

现在,我的问题是,看到可满足的似乎有些安全,可以将任何普通的XSS向量粘贴到粘贴中,如果是通过设计?

我读过一些规格/refs/任何地方都没有明确提及的是, contenteditable应该防止任何活动元素被插入页面的DOM,也不允许它允许。这让我怀疑是否应该使用可满足的功能,因为我不想冒险将某些外部JavaScript插入contenteditable。回答contenteditable的XSS安全是此问题的核心。

更新contenteditable属性相反,相似的功能文档designMode似乎是特定的(请参阅https://www.org/tr/2008/wd-html5-20080610/web-browsers.html#designmodescrockblocked)禁用(因此XSS防止)。

更新2 MDN上引用的最新参考/规格是https://html.spec.whatwg.org/multipage/interaction.html#contentedable这对于contenteditable提供的任何保证不通过粘贴引入MALICOUS JAVASCRIPT提供的任何保证是奇怪的。

没有浏览器必须遵守的标准,因此每个浏览器都将拥有自己的实现来处理用户输入。而且,如果有办法,您可以确保用户会弄清楚如何做(较旧的浏览器通常是最容易受到影响的)。无论是通过打字,粘贴等而消毒用户的输入。

至于DesignMode,您链接的零件:

当要在禁用脚本的脚本执行上下文中执行脚本时,脚本必须无能为力而没有返回(void return value)。

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

这将使它看起来像DesignMode使您"安全",但请记住,规格随着时间的推移而发展,因此不回去测试所有各种浏览器(或者至少您的用户拥有的浏览器),您将永远不会是当然。

最新更新