用途:指导在把已存储、由作者撰写或导入的内容渲染为 HTML 时避免 XSS,逐项审计所有自动转义绕过(如 |safe、Markup、mark_safe、innerHTML),并对 Markdown 等富文本输出净化后再标记为可信。
主要能力与用法:
- 先枚举信任绕过点。服务端可用 grep -rnE '|\s*safe|Markup(|autoescape false|mark_safe' templates/ src/,客户端可用 grep -rnE 'innerHTML|outerHTML|insertAdjacentHTML|document.write' web/ static/,每一处命中都需要给出理由。
- Markdown 渲染器默认放行原始 HTML,因此不要直接把渲染结果标记为 Markup;应先用维护中的 HTML 净化库(如 nh3)按标签与属性允许列表净化,再标记为可信。不要用正则剥离 script。
- 允许列表需保留渲染依赖的结构,例如 Markdown 表格扩展用内联 style 表达列对齐;允许 style 的表格单元格并限制可保留属性(filter_style_properties)。注意净化器会规范化输出(如 text-align:left),测试应匹配规范化后的形式。
- 共享过滤器的爆炸半径覆盖全部内容。修改前后对所有已创作内容逐字符渲染 diff,并作为回归测试固定。
- 测试要针对真正重要的字符串副本。同一值可能在正文、meta 标签和 JSON-LD 中出现;tojson 会转义尖括号,文档级断言会误报。应把断言限定在渲染后的正文,并断言转义形式存在,而不仅是危险形式不存在。
- 客户端也要转义:服务端转义无法阻止客户端用 innerHTML 重新注入。优先用 textContent;必须构造标记时先转义到局部变量再插值。
- 不要断言渲染输出中没有 on* 事件处理器,因为应用自身模板会合法输出处理器;应把自家模板输出的处理器列入允许列表,再对剩余部分断言。
适用场景:Web 应用中的内容渲染管线、模板过滤器、Markdown 富文本展示、服务端与前端混合渲染的安全审计与回归测试。
限制与说明:资料未提供该技能的安装命令、许可证或价格信息,故暂未提供;以上方法依赖维护中的净化库与允许列表配置,具体版本与兼容性需以实际项目为准。