Agent 实现方法论
From Scratch
学习地图
练习
术语表
← 返回首页
本章教程
本章练习
第 19 章测验
第 19 章测验
对应章节:安全与沙箱 v06
共 8 题,答对率 ≥ 80% 即通过。请完成全部题目后点击「提交」。
Q1
第 19 章沙箱层与第 18 章权限层的关系是什么?
沙箱层是权限层的简化版,权限层审批通过后沙箱不再检查
权限层管「该不该做」(意图),沙箱层管「能做多坏」(能力)——人类批准 delete_file(../../etc/passwd) 或 run_shell(rm -rf ...) 也没用,路径/白名单照样拒绝;且 auto 级工具(如 read_file)同样受路径约束
沙箱层只针对 run_shell,文件工具仍然靠审批保护
两层完全重叠,有审批门就不需要路径校验
Q2
路径安全校验为什么必须「先规范化、后做包含检查」?
规范化能让路径更短,检查更快
因为操作系统会替我们规范化——只检查原始字符串、把规范化交给 fs,会让「检查时在根内、执行时在根外」的逃逸穿透,例如 demo-notes/../../../etc/passwd 原始前缀不在根内、规范化后却是 /etc/passwd
因为模型给出的路径总是乱序的
规范化只是为了让错误提示更好看
Q3
根目录是 /work/agent,下面哪个路径会被「段感知包含检查」正确拒绝?
/work/agent/demo-notes/notes.txt
/work/agent/agent-evil/x
/work/agent/../agent-evil/x 规范化后为 /work/agent-evil/x——它是 /work/agent 的兄弟目录,字符串前缀以 /work/agent 开头但必须以 root + '/' 比较才能拒绝
/work/agent/./notes.txt
Q4
模型请求 read_file('/etc/passwd')(绝对路径),沙箱如何处理?
把 /etc/passwd 当作相对路径拼到根目录下,静默改写为根内文件
直接拒绝:absolute path not allowed,不给重新解释的机会——绝对路径点名的是根外位置,任何「宽容」改写都是把根外文件映射进根内,语义混乱且不可预期
先批准审批再拒绝
交给操作系统判断,操作系统会阻止
Q5
run_shell 用 execFile(参数数组)而不是 sh -c 执行,最核心的原因是什么?
execFile 比 shell 更快
参数数组方式不经过 shell,shell 元字符(如 ; | &&)不会被解释——模型给的 ls demo-notes; rm -rf ~ 里 ; 只是 ls 的一个普通参数,白名单拦的才是真正会执行的程序名
shell 在服务器上不存在
execFile 会自动杀掉危险进程
Q6
命令白名单的已知局限是什么?
白名单偶尔会把危险命令放进来
白名单只拦命令名,不拦参数——cat /etc/passwd 能过白名单;读取器类命令天然需要任意路径参数,彻底隔离需要容器/虚拟机级(smolagents 官方也承认本地执行不是安全边界)
白名单太严格,正常命令都无法执行
白名单会被模型绕过
Q7
间接 prompt injection 为什么在 Agent 上比聊天机器人更危险?
Agent 的模型更笨
聊天机器人只输出文本,Agent 会执行动作——注入指令藏在文件/网页里被工具读回上下文,可能触发一连串不可逆的工具调用;OWASP 将之列为 ASI01 目标劫持
聊天机器人没有上下文
只有 Agent 才用大模型
Q8
关于「工具输出不可信」原则,下列说法正确的是?
工具输出应该完全屏蔽,不给模型看
外部返回的字符串仅作数据回填(role: tool 消息),绝不拼进 system prompt;markUntrusted 标记让数据身份可观察,但标记本身不能防注入——它服务于数据/指令通道分离这一结构性原则
只要打了 [[untrusted-data]] 标记,模型就不会被注入
系统提示里引用工具输出能增强上下文,是推荐做法
提交