粘贴 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 等
我有一个内容可编辑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 等