使用 jquery parseHTML 删除脚本标签是否足以防止 XSS 攻击?

Is using jquery parseHTML to remove script tags enough to prevent XSS attacks?

我们正在使用 WYSWIG 编辑器(Froala 编辑器)并存储由用户创建的原始 HTML。因此,转义字符串不是一种选择。我打算将 HTML 字符串存储在引号内的变量或数据属性中。然后,读取 HTML 字符串并使用 jquery 的解析 HTML 删除脚本标签,并在将 HTML 加载到编辑器之前仅保留某些属性。这种方法是否足以防止所有 XSS 攻击?

不是。 几个反例:

  • <a href="javascript:alert(1)">
  • <div onclick="alert(1)">
  • <img src="javascript:alert(1)">(在现代浏览器中实际上不再有效)
  • <div style="background-image: url(javascript:alert(1))">(不再有效)

部分困难在于它还取决于用户使用的浏览器。底线是,你需要一个合适的消毒剂,它也可以在客户端。 (它也可以在服务器上,但考虑编辑器的 "preview" 特性(如果有的话)——如果预览没有发送到服务器,服务器端消毒器就没有多大用处。:) )

Google Caja 是(曾经是?)一个 html 消毒剂项目,它也有一个纯粹的 javascript 组件。有other solutions as well.

请注意,如果您想在 javascript 中执行此操作,编辑器 javascript 必须先通过自定义清理程序支持 运行 其内容,然后才能将其插入 DOM。