如何防御 Agent 的间接 Prompt Injection 和工具滥用?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
这题的关键态度是:Prompt Injection 不能只靠系统提示解决。把邮件、网页和检索片段视为不可信数据,模型提出的动作还要经过服务端工具白名单、参数策略、最小权限和高风险审批。追问数据外泄时,补充敏感信息按用途隔离,不能因为网页文字要求就改变授权边界。
可以这样答:
间接 Prompt Injection 是不可信内容试图改变 Agent 的指令或诱导其调用工具,单靠“忽略恶意提示”无法形成安全边界。网页、邮件和检索内容只能作为数据;真正的动作由服务端根据工具白名单、调用者身份、参数规则和最小权限再次校验。涉及敏感数据或不可逆操作时,还要做用途隔离和人工确认。
核心回答
间接 Prompt Injection 是把恶意指令藏在网页、邮件、文档或工具结果中,诱导 Agent 偏离用户目标并调用高权限工具。不能只靠系统 Prompt 或关键词过滤防御,因为模型同时处理自然语言指令与数据。系统应把外部内容视为不可信数据,在模型之外执行身份授权、最小权限、参数校验、网络出口限制和高风险确认,并让每个动作重新绑定原始用户意图。
展开说明
防护需要多层组合:
- 信任分层:系统规则、用户请求和外部内容标注不同来源,外部文本不能获得更高指令优先级。
- 最小权限:按任务临时授予细粒度工具和资源范围,读工具与写工具分离。
- 确定性策略:在执行器检查租户、对象所有权、参数范围、允许域名和业务前置条件。
- 高风险确认:付款、删除、授权、发送和公开发布在执行前展示规范化动作及影响。
- 数据与执行隔离:读取不可信内容的组件不直接持有高权限工具;必要时只向执行组件传递结构化、可验证结果。
- 输出与记忆防护:阻止敏感数据通过工具参数或链接外泄,未经验证的外部指令不能持久化到记忆。
Guardrail 模型和注入检测器本身也可能被绕过,只能作为纵深防御的一层。
工程实践
建立含网页隐藏指令、恶意邮件、RAG 投毒、工具描述污染和跨租户资源 ID 的红队集。日志记录动作提议、策略判定和执行结果,但不记录密钥。为高风险工具设置 Kill Switch、速率上限和只读演练环境,并定期验证授权撤销是否立即生效。
常见追问
- 直接 Prompt Injection 与间接 Prompt Injection 有什么区别? 直接注入由用户在输入中要求越过规则;间接注入藏在网页、邮件或文档等工具返回内容中,Agent 读取后被诱导执行。
- 为什么把外部内容放在分隔符中仍不能构成安全边界? 分隔符只是提示模型区分文本,没有强制执行能力;模型仍可能把其中内容解释为指令。
- 怎样让 Agent 能读邮件但不能被邮件指令诱导付款? 邮件读取工具只给只读权限,付款能力放在独立受控域,必须通过业务规则、明确用户授权和二次审批才能调用。
一句话复习
防御 Agent 注入要把不可信内容与执行权限隔离,并用模型外的授权和动作校验守住最终边界。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。