一句话定义:路径遍历(Path Traversal,也叫目录遍历 Directory Traversal)是指程序把外部输入直接拼进文件路径,攻击者用 ../ 这类“上一层目录”的写法跳出预期目录,读写本不该碰的文件。
原理:给智能体一个工具 read_file(path),工作目录是 /data/workspace。如果实现只是把两者拼起来,那么传入 ../../../../etc/passwd(Windows 上是 ..\..\Windows\win.ini)就会一路向上跳,最终落到系统目录;传入绝对路径 /etc/shadow 更省事,直接覆盖前缀。
打个比方:前台给你一张“只能进 3 号会议室”的门禁卡,但门牌是相对描述的。你说“先上楼一层再左转”,保安只核对了第一句“3 号会议室”就放行了。../ 就是那句“上一层”。
为什么对智能体格外危险:模型会把工具返回的内容当成事实。一旦读到 ~/.ssh/id_rsa、项目里的 .env、云凭据文件,密钥就进了上下文,之后可能被写进日志、发给第三方服务,或者被提示注入(AI 词典:Prompt Injection">Prompt Injection)诱导外发。有写权限更糟:../ 能覆盖启动脚本、计划任务、authorized_keys,从“读错文件”升级成“持久化后门”。
和相邻概念的区别:
| 概念 | 侧重点 | 关键防线 |
|---|---|---|
| 路径遍历 | 手法:怎么绕出目录 | 规范化后校验根目录,拒绝绝对路径 |
| 任意文件读取 | 结果:能读任意文件 | 最小权限、只读挂载 |
| 符号链接攻击 | 目录内放软链指向外部 | 解析链接(realpath)之后再校验 |
| 提示注入 | 意图:让模型“想”去读 | 内容隔离、工具调用审批 |
要注意:路径遍历是手法,任意文件读取是后果,两者常被混用;符号链接攻击是绕过“看起来已经规范化”的路径检查的常见补充手段,因为字符串层面路径确实在工作目录内,打开链接后却指向 /etc。
实际意义:对开发者,别用字符串拼接路径。先规范化(如 realpath / Path.resolve),再判断是否仍在允许的根目录之下,拒绝绝对路径和 ..,能上白名单就上白名单;更稳妥的是把文件操作关进沙箱或容器,用只读挂载和低权限账号跑。对普通职场人,给智能体授权文件夹时只给单个项目目录,别图省事给整个家目录;让它跑自动化之前,先想一句“它实际能碰到哪些文件”。具体 API 与安全配置以各项目官方文档为准。
