编码与安全指南
HTML 转义:实体编码取决于输出上下文
安全显示纯文本,区分 HTML 属性、URL、脚本上下文与富文本净化。
纯文本优先使用文本插入
向 DOM 显示用户纯文本时,textContent 可避免把内容当 HTML;生成 HTML 文本时可使用实体编码。
本站工具转义五种基础实体,结果是一种表示方式,不是通用净化器。
Input: <b>A&B</b>
HTML text: <b>A&B</b>匹配具体输出上下文
带引号 HTML 属性需要对应转义,JavaScript、CSS 和 URL 位置还有不同语法及校验要求。
JSON 字符串转义不是 HTML 转义,不能把同一个编码结果放进所有位置并假设浏览器始终按文本处理。
插入 URL 前校验协议
编码地址不会让危险协议变安全,创建外链时需采用 HTTPS 等允许列表。
URL 校验后再用安全属性 API 或正确属性编码,编码与协议校验解决不同部分的问题。
富 HTML 需要专门净化
允许富文本标签时,全部转义会破坏功能,直接插入又可能接受不需要的标签或属性。
使用维护中的净化器与明确策略,检查边界的解码和双重编码,不能反复解码直到不可信文本变成可执行标签。