我已经阅读了有关的相关问题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。
只要你在服务器端清理输入,我不明白为什么有人在'contenteditable'中粘贴JavaScript就是一个问题。任何人都可以打开开发工具并在页面上执行任何可能足以应对XSS攻击的JavaScript(如果服务器端未设置为防止此类攻击)。 –
@DeepakKamat我想(假设用户已经登录并且有一定的权限来删除内容),如果粘贴一个恶意脚本会继承这个特权,我会认为这是有问题的。你打算说什么?此外,我假设XSS安全还会覆盖用户数据(如他的输入数据)的安全性,如果可能,通过'contenteditable'可能会将恶意脚本发送给恶意第三方。当然,它的服务器是不妥协的,但在我的理解中,攻击用户帐户/数据的XSS不好,因此我担心 – humanityANDpeace
为什么从9年半前阅读规格而不是当前规格? – BoltClock