粘贴的HTML是否可以保证消毒?

Pau*_*per 5 html security contenteditable

我有一个内容可编辑的div:

<div contenteditable="true"></div>
Run Code Online (Sandbox Code Playgroud)

HTML可以粘贴到该div中.HTML保证不具有脚本标记或事件处理程序属性等吗?

我还没有找到源代码,但我猜所有浏览器都会删除脚本.否则,似乎对网络钓鱼式用户XSS非常开放:"通过将其粘贴到Gmail中,可以看到跳舞的小马......"


编辑:例如,<script>如果您复制并粘贴以下内容,Chrome会删除该元素:

div {
  border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
Copy this:
<div>
  <b>Stack</b> <i>Overflow</i>
  <br>
  <script>
    if(document.querySelectorAll('div[contenteditable=true]').length) {
      alert('Hacked!');
    }
  </script>
  <img src="http://blog.stackoverflow.com/wp-content/uploads/stackoverflow-logo-300.png">
</div>
<br>
<br>
Into this: (if you see a `Hacked!` alert, the script was not stripped)
<div contenteditable="true"></div>
Run Code Online (Sandbox Code Playgroud)

这是一种保证行为吗?或者我是否必须做一些特殊的事情来阻止XSS?

c-s*_*ile 1

简短的回答:不,粘贴的 HTML 不保证不包含脚本标签和其他形式的脚本嵌入。

contenteditable 不是一个现成的所见即所得编辑器,而是一种在其之上创建编辑器的机制。所以不要指望其中有粘贴内容过滤。这是 contenteditable 之上的代码负责过滤脚本、MS Word 内容、Apple Richtext 跟踪等。

更重要的是:HTML 剪贴板格式没有在任何地方指定。每个平台都使用自己的。例如,Windows 使用CF_HTML,OS X 有自己的 CF_HTML ,但没有在任何地方指定,等等。