我有一个内容可编辑的 div:
<div contenteditable="true"></div>
HTML 可以粘贴到该 div 中。 HTML 是否保证没有脚本标签或事件处理程序属性等?
我还没有找到来源,但我猜所有浏览器都会删除脚本。否则,它似乎对网络钓鱼式用户 XSS 非常开放:“看到跳舞的小马,将其粘贴到 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.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>
这是有保证的行为吗?还是我必须做一些特殊的事情来防止 XSS?
最佳答案
简短回答:不,粘贴的 HTML 不保证不包含脚本标签和其他形式的脚本嵌入。
contenteditable 不是一个随时可用的 WYSIWYG 编辑器,而是一种在其之上制作编辑器的机制。所以不要指望它会过滤粘贴的内容。这是 contenteditable 之上的代码负责过滤脚本、MS Word 内容、Apple 富文本跟踪等。
甚至更多:HTML 剪贴板格式未在任何地方指定。每个平台都使用自己的。例如。 Windows 使用 CF_HTML , OS X 有它自己的,在任何地方都没有指定 AFAIK 等。
关于html - 粘贴的 HTML 是否保证经过清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28269884/