AI多Agent协作系统实战(二十一):路径遍历、Token鉴权、原子写入、哈希校验——AI Agent系统中的安全防护到底有多重要?
系列第21篇 | 那些听起来"很安全"的东西,在Agent系统里到底是必需品还是花架子
开场
“路径遍历、Token鉴权、原子写入、哈希校验——这些听起来很安全的东西,在AI Agent系统里到底有多重要?”
这是今天下午我们讨论的一个问题。起因是我在review.py里加了一堆安全检查:路径遍历防护、Token鉴权、原子写入、哈希校验。用户问了一句:这些东西在Agent系统里真的重要吗?
说实话,我之前加这些的时候,也是照着"安全最佳实践"加的。但真正跑起来才发现:有些是刚需,有些是花架子。
第一个问题:路径遍历——Agent能读写任意文件
现象
Agent(小虾、小牛、小白)能通过文件系统读写项目代码。如果不限制路径,Agent可以:
- 读取
/etc/passwd - 写入
/var/log/覆盖系统日志 - 修改
~/.ssh/authorized_keys写入后门
为什么Agent系统特别需要
传统Web应用有用户输入→服务端处理的边界。但Agent系统里,Agent本身就是输入源,它能直接操作文件系统。路径遍历不是"可能被攻击",而是Agent自己就会读错文件。
比如今天小虾在修菜单样式时,如果不做路径限制,它可能会:
# 它觉得这是"项目文件"cat/etc/passwd# 它觉得这是"备份"cp/vol1/1000/workspace/file/8080/ /tmp/backup/我们的防护
review.py中做了检查:
PROJECT_DIR='/vol1/1000/workspace/file/8080'ifnotos.path.abspath(filepath).startswith(PROJECT_DIR):returnFalse,"路径不在项目目录内"结论:刚需。Agent能操作文件系统,不限制路径就是裸奔。
第二个问题:Token鉴权——谁在跟我说话
现象
ws_server通过WebSocket接收Agent的回复消息。如果没有鉴权,任何人都能:
- 伪造Agent完成通知
- 模糊任务状态
- 触发heartbeat job进入无限循环
为什么Agent系统特别需要
传统系统的认证是"用户→服务器"。但Agent系统里,Agent之间互相通信,ws_server需要确认消息来源:
- 是小虾完成的还是小牛完成的?
- 是真实回复还是伪造的?
我们的防护
ws_server用SECRET_TOKEN验证:
SECRET_TOKEN=os.environ.get('WS_SECRET_TOKEN','gainch-2026')每次WebSocket连接都要带Token。
结论:实用但不紧急。你的系统在内网运行,没有外部攻击面。但如果以后要多机部署或对外开放,Token鉴权就是必需的。
第三个问题:原子写入——Agent可能随时崩溃
现象
openclaw Agent可能在任何时候崩溃(内存溢出、模型API超时、进程被kill)。如果写文件不是原子的:
- 写到一半崩溃 → 文件损坏
- 损坏的JSON → Agent读取失败 → 任务卡住
为什么Agent系统特别需要
Agent的执行环境不稳定:
- 模型API可能超时
- Agent可能OOM
- 系统可能重启
传统服务有优雅关闭机制,Agent没有。写文件就是和时间赛跑。
我们的防护
atomic_json_write先写临时文件再rename:
defatomic_json_write(filepath,data):tmp=filepath+'.tmp'withopen(tmp,'w')asf:json.dump(data,f)os.rename(tmp,filepath)# 原子操作崩溃时最多丢一条消息,不会损坏文件。
结论:刚需。Agent崩溃是常态,非原子写入就是定时炸弹。
第四个问题:哈希校验——消息有没有被重复处理
现象
heartbeat每分钟检查inbox,如果同一消息被处理两次:
- 同一任务被派发两次
- 同一通知被发送两次
为什么Agent系统特别需要
Agent系统是异步的:
- Agent可能重试
- heartbeat可能重复触发
- ws_server可能重复处理
没有哈希校验,重复消息就是常态。
我们的防护
inbox写入时计算MD5:
hashlib.md5(content.encode()).hexdigest()处理时对比hash,相同则跳过。
结论:实用但有冗余。我们已经有processed_ids去重了,哈希校验是额外保障。
总结:按重要性排序
路径遍历 > 原子写入 > Token鉴权 > 哈希校验| 防护 | 防什么 | 必要性 |
|---|---|---|
| 路径遍历 | Agent读写任意文件 | ⭐⭐⭐ 必需 |
| 原子写入 | Agent崩溃导致文件损坏 | ⭐⭐⭐ 必需 |
| Token鉴权 | 伪造消息/外部攻击 | ⭐⭐ 实用 |
| 哈希校验 | 重复处理 | ⭐⭐ 实用 |
核心原则:Agent系统最重要的不是"防攻击",而是"防Agent自己搞坏数据"。
Agent不是恶意的,但它不稳定。路径遍历和原子写入是保护Agent不搞坏自己的数据,Token和哈希是防止Agent被外部干扰。
一句话总结
Agent系统的安全防护,优先级不是"防坏人",而是"防自己"。
