编码与安全指南

HTML 转义:实体编码取决于输出上下文

安全显示纯文本,区分 HTML 属性、URL、脚本上下文与富文本净化。

Nav Tools ·

纯文本优先使用文本插入

向 DOM 显示用户纯文本时,textContent 可避免把内容当 HTML;生成 HTML 文本时可使用实体编码。

本站工具转义五种基础实体,结果是一种表示方式,不是通用净化器。

Input: <b>A&B</b>
HTML text: &lt;b&gt;A&amp;B&lt;/b&gt;

匹配具体输出上下文

带引号 HTML 属性需要对应转义,JavaScript、CSS 和 URL 位置还有不同语法及校验要求。

JSON 字符串转义不是 HTML 转义,不能把同一个编码结果放进所有位置并假设浏览器始终按文本处理。

插入 URL 前校验协议

编码地址不会让危险协议变安全,创建外链时需采用 HTTPS 等允许列表。

URL 校验后再用安全属性 API 或正确属性编码,编码与协议校验解决不同部分的问题。

富 HTML 需要专门净化

允许富文本标签时,全部转义会破坏功能,直接插入又可能接受不需要的标签或属性。

使用维护中的净化器与明确策略,检查边界的解码和双重编码,不能反复解码直到不可信文本变成可执行标签。

参考资料

← 编码与安全指南