html - 粘贴的 HTML 是否保证经过清理?

标签 html security contenteditable

我有一个内容可编辑的 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/

相关文章:

html - ng-include 拉伸(stretch)页面高度 - 如何使普通列与 ng-include 区域的高度相同?

java - 部署时无法将 CSS 文件加载到同一文件夹中

javascript - 如何在html5本地存储中保存html、javascript和css文件?

c# - 我怎样才能安全地让用户使用(Postgresql?

web-services - ServiceStack Web服务安全性

c# - SSL 还是自己的实现?

html - 如何在 WordPress 中设置桌面菜单宽度的样式?

javascript - 在 contenteditable div 中设置插入符位置

javascript - Rangy 在 contenteditable div 的退格键上失去了插入符号位置

javascript - 使用 textangular 在内容可编辑的 div 中记录和恢复插入符号的位置