我有一个内容可编辑的div:
<div contenteditable="true"></div>
HTML可以粘贴到该div中。 HTML保证不具有脚本标记或事件处理程序属性等吗?
我还没有找到源代码,但我猜测所有浏览器都会删除脚本。否则,它似乎对网络钓鱼式用户XSS非常开放:&#34;通过将其粘贴到Gmail中来看跳舞小马......&#34;
修改:例如,如果您复制并粘贴以下内容,则Chrome会删除<script>
元素:
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;
这是一种保证行为吗?或者我是否必须采取一些特殊措施来阻止XSS?
答案 0 :(得分:1)
简短回答:不,粘贴的HTML 不保证不包含脚本标记和其他形式的脚本嵌入。
contenteditable不是一个随时可用的WYSIWYG编辑器,而是一个使编辑器在其上面的机制。因此,不要期望在其中粘贴内容过滤。代码的责任在于满足过滤脚本,MS Word内容,Apple richtext痕迹等等的责任。
更多:HTML剪贴板格式未在任何地方指定。每个平台都使用自己的。例如。 Windows使用CF_HTML,OS X有自己的,没有在任何地方指定AFAIK等。