前端页面同时使用服务端模板、客户端插值和富文本时,如何防止上下文错配导致脚本执行
简答题中等456 次浏览
参考答案与解析
# 核心结论
防御此类注入的关键不是对输入统一“过滤”,而是把数据从产生、存储到进入最终解释器的路径画清楚,并在最接近输出的位置按上下文进行编码。服务端模板中的 HTML 文本、属性值、URL、内联 JavaScript,以及客户端写入 DOM 的位置,分别属于不同语法环境,不能共用一种转义函数。普通文本应通过默认自动转义的模板语法或 textContent 写入;属性应由框架的属性绑定机制处理;链接除了编码,还要校验协议和目标;动态脚本、事件属性及 javascript: 地址原则上应禁止。
底层原因是浏览器会依次使用不同解析器解释响应内容。某段数据在 HTML 文本中看似无害,拼入事件属性或
