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

时间:2015-02-02 01:16:01

标签: html security contenteditable

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

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

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

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


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

&#13;
&#13;
div {
  border: 1px solid black;
}
&#13;
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>
&#13;
&#13;
&#13;

这是一种保证行为吗?或者我是否必须采取一些特殊措施来阻止XSS?

1 个答案:

答案 0 :(得分:1)

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

contenteditable不是一个随时可用的WYSIWYG编辑器,而是一个使编辑器在其上面的机制。因此,不要期望在其中粘贴内容过滤。代码的责任在于满足过滤脚本,MS Word内容,Apple richtext痕迹等等的责任。

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