如果您想要真正安全的代码,白名单方法(“只允许这些事情:...”)通常比黑名单方法(“不允许这些事情:...”)更可靠。
您提到了 HTML Purifier 并且“它没有删除所有事件属性的选项”。
那是...在技术上是正确的,因为您不能告诉它删除事件属性。不过,原因在于卖点:它会自动执行此操作。“缺少”的选项是配置 HTML Purifier 以允许事件属性的能力。这是故意的不对。HTML Purifier(顾名思义)具有很强的安全性。
您可以使用 HTML Purifier 配置允许一些“不安全的 HTML”方面(默认配置是故意挑剔的),但事件属性不在其中。(好吧,如果你跳过圈子,你可以教 HTML Purifier 接受它们,但这需要付出很多努力。)
如果您想接受用户 HTML,我建议您再试一次。这是一个相当成熟的工具,已经过很多人的测试。
有一些非常棘手的方法可以破坏 HTML 并注入 JavaScript。例如,您是否知道可以使用src
orhref
属性注入 JavaScript?你知道你可以在某些浏览器中使用style
标签注入 JavaScript 吗?看看这个 XSS 备忘单。它可能会让您大致了解您所面临的问题,以及为什么通常认为白名单更有效。
不管怎样,祝你好运!