进阶第 11 章:安全与沙箱
业务问题
AI 编码助手会执行命令和修改文件。客服 Agent 会访问用户数据。安全边界决定产品能否上线。
交互图解:工具执行、权限与批准流程 · 查看图解导读
核心原理
主要风险:
- Prompt injection:外部内容诱导模型执行危险动作。
- SSRF:模型抓取 URL 时访问内网。
- 危险工具:删除文件、执行任意命令、泄露凭据。
- 权限漂移:用户批准后上下文变化。
防护层次:
text
输入识别
-> 工具能力限制
-> 权限策略
-> 沙箱执行
-> 审计日志真实项目中的映射
编码助手:
- 读文件通常低风险。
- 写文件需要批准。
- 执行命令需要沙箱。
客服 Agent:
- 查询订单需要权限。
- 修改订单需要批准。
- 外部网页内容不能被完全信任。
DeepSeek Harness 对应实现
DeepSeek Harness 默认组合包含 sandbox、permission、approval。
tools/pre-execute 可以返回 allow、deny 或 ask。ask 由 approval 服务处理。
Code Mode 使用 run_code 作为保留 transport。模型不能直接调用其他工具,只能通过 run_code 程序内部调用。
进一步阅读:
packages/bundle/base/cordis.patch.ymldocs/subsystems/approval.mddocs/subsystems/sandbox.md
代码示例
ts
type ToolPermission = 'allow' | 'deny' | 'ask'
interface ToolPolicy {
toolName: string
permission: ToolPermission
}
function decidePermission(
toolName: string,
args: unknown,
policies: ToolPolicy[],
): ToolPermission {
const policy = policies.find(item => item.toolName === toolName)
return policy?.permission ?? 'ask'
}真实权限系统还要考虑参数、作用域、会话和用户身份。
面试追问
问:什么是 Prompt Injection?
回答要点:
- 外部内容被模型当作指令。
- 可能导致工具调用。
- 文件、网页、邮件都可能注入。
- 需要限制工具能力和强制批准。
问:为什么 SSRF 对 Agent 很危险?
回答要点:
- 模型可能请求内网 URL。
- 可能读取云元数据。
- 必须限制协议、域名和网络范围。
问:Human-in-the-loop 应该加在哪?
回答要点:
- 高风险工具执行前。
- 权限变更前。
- 结果影响不可逆时。
- 前端展示批准请求,后端负责最终执行。
实践任务
为“执行命令”和“修改订单”设计策略,并列出哪些情况必须 ask。
验收标准
- 能解释 Prompt Injection 和 SSRF。
- 能设计 allow/deny/ask 策略。
- 能说明前后端安全责任边界。