对HTML做白名单过滤
这篇讲的是如何构建一个安全高效的HTML白名单过滤系统。作者直指当前许多应用在处理用户富文本输入时,直接采用黑名单方式过滤危险标签或属性的不足——黑名单容易遗漏,面对复杂嵌套结构时更是防不胜防。
文章的核心方案是转向基于DOM解析的白名单机制。它强调在解析后操作节点,逐一检查标签、属性、事件处理器是否在预先定义的“安全名单”中,不在名单内则果断移除。文中还讨论了处理标签嵌套、属性值、以及如何安全地处理 ``、`` 等常用标签的具体实践,比如对 `href`、`src` 属性进行协议校验,阻止 `javascript:` 等伪协议。
相比于简单粗暴的黑名单正则替换,这种方案更精确、可维护,能有效防御包括XSS在内的多种注入攻击。作者通过这个案例展示了一种“默认拒绝”的安全思维:在内容安全领域,明确允许什么,往往比试图禁止所有危险项更可靠。