模板渲染的安全问题
渲染层同样存在注入面:用户变量若包含模板语法标记,可能在二次渲染时被当成模板解析;若包含分隔符,可以伪造新的段落冒充指令区块。对策是变量先校验再转义,只允许进入数据区,指令区保持固定文本,渲染完成后做一次结构完整性检查。
基本信息
| 风险一 | 变量含双大括号等模板语法标记,被二次解析 |
|---|---|
| 风险二 | 变量含分隔符,伪造段落冒充指令区 |
| 对策 | 先校验再转义;变量只进数据区;渲染后做结构检查 |
| 结构检查 | 区块数量、标记配对、分隔符是否完整 |
| 留痕 | 保存模板版本与变量摘要,便于回溯某次渲染 |
典型使用场景
- 用户昵称与地址类变量:内容不可控,最容易携带奇怪字符
- 多级模板嵌套:上层的转义结果被下层再次解析,需要明确谁负责转义
- 检索片段注入:外部文档内容进模板前要按数据区规则处理
- 批处理渲染:一次渲染上千条,结构检查能提前拦住异常输入
- 模板引擎升级:换引擎后转义规则变化,必须重跑一遍回归
安全渲染步骤
安全渲染步骤
1 校验变量类型与长度,超限直接拒绝而不是截断
2 按目标模板语法转义控制字符与语法标记
3 渲染生成最终提示词
4 结构检查:区块数量、标记配对、分隔符是否完整
5 留存渲染快照:模板版本 + 变量摘要(不含敏感原文)
# 注意: 嵌套模板要明确只有一层负责转义,避免重复转义风险与对策对照
| 风险 | 表现 | 对策 |
|---|---|---|
| 模板语法注入 | 变量被二次解析成模板 | 转义语法标记,变量只进数据区 |
| 段落伪造 | 数据区内容冒充指令段 | 分隔符转义,渲染后校验区块数 |
| 嵌套重复转义 | 输出里出现转义残渣 | 约定单一转义层 |
| 元数据遗漏 | 只转义正文漏了嵌套字段 | 字段清单化,逐个覆盖 |
转义规则改动后必须抽样回归:转义字符本身如果影响模型理解,安全加固会变成质量下降。