服务端模板、客户端渲染与富文本组件混用时,数据应在哪些位置完成安全转换?
简答题中等938 次浏览
参考答案与解析
# 核心结论
服务端模板、客户端渲染和富文本组件混用时,安全转换应发生在每一次数据即将进入具体解释器的位置,而不是在输入入口做一次所谓的通用过滤。普通文本应根据最终输出上下文进行编码,并优先使用不会触发字符串解析的安全接口;只有业务确实需要保留标签语义时,才对富文本使用成熟的允许列表净化器。若同一份数据先经过服务端模板,随后又被客户端拼接为 HTML,或者被组件转换到属性、网址、样式和脚本上下文,必须按新的上下文重新建立安全保证,不能假设前一层的转义永久有效。
# 底层机制
浏览器只按照语法位置解释字符,并不知道字符串是否来自可信来源。进入 HTML 文本节点的数据需要执行文本上下文编码;进入带引号属性值的数据
