我已经阅读了一些相关的问题div contenteditable, XSS,但它的答案并未突出显示关于可信任的XSS安全性。特别是在意外方面(与内部跨站点脚本相比)。当然,我知道我应该清理用户输入服务器端。
TL.DR。:我是否可以确定用户没有风险通过设置的页面元素{{1}引入一些外部脚本(即通过剪贴板粘贴的数据) }?规范是否确保粘贴到contenteditable的任何标记在插入DOM之前都要进行清理?
我注意到在我测试的两个主要浏览器Chromium / Chrome和Firefox上,似乎不可能意外地将活动元素插入contenteditable
标记。例如,我想象的这种加入插入的一个例子是:
contenteditable
元素。 contenteditable
并将其粘贴到echo "<b onclick='alert("XSS");'>click me</b>" | xclip -t text/html -selection "clipboard"
中。 活动元素类似于:
contenteditable
<script>
onclick="alert(\"XSS\");"
现在我的问题是,如果设计符合正常的XSS载体那么看起来有点可信吗?
我已经阅读了一些specs/refs/whatever,它没有明确提到<a href="javascript:alert(\"XSS\")"> click me </a>
应该阻止任何活动元素插入到页面的DOM中,也不会是允许。这使我怀疑是否应该使用contenteditable功能,因为我不想冒一些外部JavaScript被插入contenteditable
的风险。回答contenteditable
的XSS安全性是这个问题的核心。
更新
与contenteditable
属性相比,类似的功能文档contenteditable
似乎是特定的(请参阅https://www.w3.org/TR/2008/WD-html5-20080610/web-browsers.html#designModeScriptBlocked)关于被禁用的JavaScript(因此阻止了XSS)。
更新2
MDN上引用的最新参考/规范是https://html.spec.whatwg.org/multipage/interaction.html#contenteditable
对于designMode
提供的不通过粘贴引入恶意javascript的任何保证,这是奇怪的无动于衷。
答案 0 :(得分:0)
没有标准的浏览器必须遵守,因此每个浏览器都有自己的实现来处理用户输入。如果有办法,你可以确定用户会弄清楚如何做(旧版浏览器通常最容易受到影响)。您可以自己清理用户的输入,无论是打字,粘贴等等。(我必须为项目执行此操作,您无法依赖它&#34;正在工作&#34;)。
至于designMode,您链接的部分:
当要在禁用脚本的脚本执行上下文中执行脚本时,脚本必须不执行任何操作并且不返回任何内容(void返回值)。
因此,例如,启用designMode将禁用由文档中的脚本设置的任何事件处理程序属性,事件侦听器,超时等。
这会使看起来像designMode让你安全&#34;但请记住,规格随着时间的推移而演变,所以不用回去测试所有各种浏览器(或者至少是你的用户拥有的浏览器),你永远不能确定。