SSTI 是什么
服务端模板注入(SSTI)出现在用户输入被拼进服务端模板并参与编译的场合:模板引擎会把输入当成模板语法解析,而不仅是当成文本渲染。验证思路是用一个无害的算式标记判断输入是否被当作表达式求值——原样输出说明输入只被当文本,输出计算结果则说明进入了模板编译流程。
基本信息
| 常见入口 | 邮件模板、页面组件、报表、可自定义文案处 |
|---|---|
| 判定信号 | 提交的算式标记被求值并渲染出结果 |
| 误报来源 | 前端模板语法:由浏览器渲染,与服务端无关 |
| 验证边界 | 确认表达式被求值即停止,不访问系统对象 |
| 记录要求 | 页面、参数、模板引擎特征与验证时间 |
典型使用场景
- 通知与邮件模板中的自定义文案字段
- 报表与导出模块的可配置标题、页脚
- 多语言文案与页面组件中的可编辑内容
- 自定义页面、公告与签名档等富文本入口
- 模板文件可上传或可选择的配置项
验证标记用法
验证标记用法
# 在可控输入处提交一个无害的算式标记(两个相同整数相乘)
# 观察响应差异:
# 原样输出标记 → 输入未参与模板编译,非 SSTI
# 渲染出乘积结果 → 疑似 SSTI,记录上下文
# 记录:页面路径、参数名、标记写法、响应片段、模板特征
# 判定成立后立即停止,不做系统对象访问与命令类尝试响应差异读法
| 响应表现 | 含义 | 后续动作 |
|---|---|---|
| 标记原样输出 | 输入被当纯文本 | 标注未复现,换入口继续排查 |
| 输出计算结果 | 输入参与模板编译 | 记录证据并停止,建议优先修复 |
| 返回模板语法错误 | 模板引擎解析了输入但语法不完整 | 属于强信号,需结合上下文复核 |
| 前端渲染后才出现结果 | 前端模板行为,非服务端问题 | 标注为误报并说明判定依据 |
验证到表达式被求值即停止:不要尝试访问系统对象、读取文件或执行命令类表达式,这已经超出验证范围。
不同模板引擎的语法标记各不相同,单一标记无结果不能直接判定不存在,需结合引擎类型选择对应标记。