Prompt Injection、权限边界与 Human-in-the-loop

Agent 可能把网页、邮件或工具输出中的内容带回模型,因此需要防止外部文本改变原来的执行权限。人工确认也要放在真正有影响的动作之前。下面把输入来源、工具权限与审批流程一起考虑。

1. Prompt Injection

Agent 读取网页、邮件、文档和工具输出时,内容中可能包含试图改变系统目标的指令。防护原则:

  • 外部内容是 data,不是 instruction;
  • 系统规则、用户目标和外部数据分层;
  • 工具和资源按最小权限暴露;
  • 敏感数据不进入不必要上下文;
  • 写/发/删等动作经过确定性策略;
  • 最终动作参数在执行前重新校验。

仅在 system prompt 写“忽略恶意指令”不够。

2. Data Exfiltration 与 Tool Abuse

典型链路:

Text
untrusted document -> persuades model -> read secret/tool -> sends data to external destination

阻断点包括:

  • 读取与发送工具不在同一默认权限集合;
  • 秘密使用引用注入,不展示明文;
  • 出站域名/目标 allowlist;
  • 数据分类与流向策略;
  • 副作用动作预览;
  • 日志与 DLP 检查。

3. Human-in-the-loop

适合确认:

  • 发送外部消息;
  • 删除或覆盖;
  • 发布和部署;
  • 付款/采购;
  • 修改权限;
  • 处理高敏感数据;
  • 结果不可轻易撤销的动作。

确认界面要显示精确目标、参数、影响、来源和可选修改。确认 token 绑定 tool、规范化参数、会话和过期时间;参数变化后重新确认。

4. Sandbox 与资源边界

  • 文件系统工作区;
  • 网络出站;
  • CPU/内存/时间;
  • 进程与系统调用;
  • 环境变量和凭据;
  • 浏览器 profile;
  • 数据库角色;
  • 子 Agent 委派范围。

模型只能在 Harness 提供的 capability 内行动。

5. 安全回归

测试:

  • 文档内伪系统指令;
  • 工具结果诱导读取密钥;
  • 混淆 URL;
  • 路径遍历;
  • 确认后参数替换;
  • 子 Agent 权限扩大;
  • 日志泄漏 token;
  • 删除/发送的重复执行;
  • RAG 权限后过滤。

结果不仅是“模型是否识别”,还要验证确定性策略是否真正阻断。

把防护放在副作用发生之前

如果输入检查和 Agent 同时开始,检查器判定不合格时,工具可能已经执行了。Agents SDK 文档把并行输入 guardrail 与阻塞模式分开,并说明并行模式存在这个时间窗口。

因此,付款、发消息、删除数据等动作不能只靠最后一层输出检查。先在具体工具执行前校验权限与必要审批,再把结果交给模型组织文字。输出 guardrail 可以拦截回答,却不能撤销已经发生的外部动作。

做一个不产生真实副作用的练习:假工具只把 executed 从 false 改成 true。让输入检查延迟后拒绝,分别观察并行模式与阻塞模式,再加工具前置校验。通过这个过程,你能看见每道检查究竟挡住了哪一步。

本节的核验依据

2026-10-25 查阅。下面的链接支持本节的机制说明;练习场景和选型建议是本教程的教学设计。