Agent 应用从 demo 走向生产的路上,功能问题好解,安全问题容易被跳过。结合 OWASP 最新的 Agent 威胁分类和我们自己的上线检查单,五道安全门,一一道来。
第一道:提示注入的隔离
用户输入直接拼进 system prompt 是最常见的坑。攻击者一句「忽略之前的指令」就能让 Agent 变剧本杀。防线:指令与数据分层——用户输入永远走独立的消息角色,system 区只放你写死的指令;对用户输入做意图白名单校验(这个 Agent 允许做什么,超出即拒)。
第二道:工具调用的最小权限
Agent 能调的每个工具都是一个攻击面。防线:按会话授权,不按 Agent 授权——一次会话里 Agent 只拿得到本次任务需要的工具子集;高危工具(删数据、对外发送、支付)必须二次确认,且确认由人触发而非模型判断。
第三道:输出内容的围栏
Agent 的输出会流回用户界面、写进数据库、触发下游动作。防线:输出过同一套过滤——你的 Web 应用对用户输入做什么 XSS/敏感词过滤,对 Agent 输出就做什么(它本质是个「会自动生成内容的用户」)。别因为内容是自己生成的就跳过校验。
第四道:记忆污染
有长期记忆的 Agent,记忆本身就是攻击目标——污染一条记忆(「用户喜欢 XX」),后续所有会话都被带偏。防线:记忆分级+来源标记——核心偏好类记忆只能从「确认过的行为」提取,临时上下文定期清理,记忆写入记审计日志。
第五道:成本与行为的熔断
安全不只防黑客,也防失控——Agent 循环调用工具卡死、token 消耗暴走、异常重试风暴。防线:三重熔断——单会话调用次数上限、单日 token 预算上限、异常行为模式告警(如同一工具连续失败 N 次)。熔断是运维安全,也是钱包安全。
结语
五道门的共同思路:不信任任何单一环节——输入不可信、输出不可信、模型判断不可信、记忆不可信、行为不可控,每一环都设独立防线。Agent 的安全不是加一个过滤器,是换一种架构思维。