粘贴 HTML 是否保证会被清除?

Is pasted HTML guaranteed to be sanitized?

我有一个内容可编辑div:

<div contenteditable="true"></div>

HTML 可以粘贴到 div 中。 HTML 是否保证没有脚本标签或事件处理程序属性等?

我没有找到来源,但我猜所有的浏览器都会删除脚本。否则,它似乎对钓鱼式用户 XSS 非常开放:"see dancing ponies, by pasting this into Gmail..."


编辑: 例如,如果您使用以下内容进行复制和粘贴,Chrome 会删除 <script> 元素:

div {
  border: 1px solid black;
}
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.whosebug.com/wp-content/uploads/Whosebug-logo-300.png">
</div>
<br>
<br>
Into this: (if you see a `Hacked!` alert, the script was not stripped)
<div contenteditable="true"></div>

这是有保证的行为吗?还是我必须做一些特别的事情来防止 XSS?

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

contenteditable 不是一个随时可用的 WYSIWYG 编辑器,而是一种在其之上制作编辑器的机制。所以不要指望它会过滤粘贴的内容。这是 contenteditable 之上的代码负责过滤脚本、MS Word 内容、Apple 富文本跟踪等。

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