Agent 如何防 Prompt 注入
2026-09-02 11:37:50
问题根源
对于模型来说所有的输入都会转换成token处理,模型从架构上是分不清哪些是数据哪些是指令,光加限制词是没用的,治标不治本。
解法
纵深防御,四层防线叠着来
输入层
隔离+检测:东西没过模型 先检测过滤一遍
1.结构隔离
不可信的内容不要直接写入到 prompt,放进结构化字段用专门的标签包裹标记,让模型明确知道这段是数据,不是命令
2.分类器扫描
独立检测模型或规则引擎,识别诱导性指令、越狱模版
3.拦截或降级
全拦截误杀概率太高,按风险三挡分流,安全和体验兼得
- 确认恶意 命中攻击特征,直接拒绝进行拦截并记录
- 可疑 附加风险标记,降级后进入后续处理
- 正常 无风险,正常进入模型处理
模型层
- 让模型自己可以识别哪些是恶意指令,进行对抗训练,在模型训练微调阶段大量混入攻击样本,对这样的样本全部标注为危险直接拒绝执行
- 训练模型理解优先级概念,系统指令最大,用户输入最小,当用户输入攻击内容时被模型认为优先级低于系统指令优先级,也不会再进行处理
- 对敏感/危险操作进行二次确认提问,你确认要****吗?
执行层
最硬的一层:权限管控,注入成功也做不了破坏
- agent 只给可完成当前任务的最小权限,不给管理员/root权限
- 能调用什么工具,能传什么参数,能调什么接口,都要经过白名单校验,每一次调用都要通过检测关卡
- 高危操作要人工审核确认
- 沙箱+读写分离,敏感操作在沙箱里跑,读写用不同的凭证和通道,写操作走更严格的审批流程
输出层
- 过滤敏感信息:生成内容返回给用户之前再扫描一遍,将危险敏感信息过滤掉
- 全链路追溯:从输入到分类器判决、模型推理、工具接口调用,全链路日志记录形成审计链,出现问题方便进行溯源
- 实时监控异常危险操作立刻告警
总结
前两层处理降低模型中招的概率,执行层是最硬的一层:权限管控,注入成功也做不了破坏,输出层进行兜底,哪怕出了问题也可以进行追踪溯源