我们正在使用WYSWIG编辑器(Froala编辑器)并存储由用户创建的原始HTML。因此,转义字符串不是一种选择。我打算将HTML字符串存储在引号内的变量或数据属性中。然后,读取该HTML字符串并使用jquery的parseHTML删除脚本标签,并仅保留某些属性,然后再将HTML加载到编辑器中。这种方法足以阻止所有XSS攻击吗?
答案 0 :(得分:2)
不是。 一些反例:
<a href="javascript:alert(1)">
<div onclick="alert(1)">
<img src="javascript:alert(1)">
(实际上在现代浏览器中不再起作用)<div style="background-image: url(javascript:alert(1))">
(不再工作)部分困难在于它还取决于用户使用的浏览器。最重要的是,您需要一个合适的消毒剂,它也可以在客户端使用。 (它也可以在服务器上,但是如果有的话,请考虑编辑器的“预览”功能-如果没有将预览发送到服务器,则服务器端清理程序的用处不大。:))
Google Caja是(是?)一个HTML sanitizer项目,它也有一个纯javascript组件。有other个解决方案as well。
请注意,如果您想在javascript中进行操作,则编辑器javascript必须支持通过自定义消毒剂运行其内容,然后才能将其插入DOM。