:路径遍历、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/8080ifnotos.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_TOKENos.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先写临时文件再renamedefatomic_json_write(filepath,data):tmpfilepath.tmpwithopen(tmp,w)asf:json.dump(data,f)os.rename(tmp,filepath)# 原子操作崩溃时最多丢一条消息不会损坏文件。结论刚需。Agent崩溃是常态非原子写入就是定时炸弹。第四个问题哈希校验——消息有没有被重复处理现象heartbeat每分钟检查inbox如果同一消息被处理两次同一任务被派发两次同一通知被发送两次为什么Agent系统特别需要Agent系统是异步的Agent可能重试heartbeat可能重复触发ws_server可能重复处理没有哈希校验重复消息就是常态。我们的防护inbox写入时计算MD5hashlib.md5(content.encode()).hexdigest()处理时对比hash相同则跳过。结论实用但有冗余。我们已经有processed_ids去重了哈希校验是额外保障。总结按重要性排序路径遍历 原子写入 Token鉴权 哈希校验防护防什么必要性路径遍历Agent读写任意文件⭐⭐⭐ 必需原子写入Agent崩溃导致文件损坏⭐⭐⭐ 必需Token鉴权伪造消息/外部攻击⭐⭐ 实用哈希校验重复处理⭐⭐ 实用核心原则Agent系统最重要的不是防攻击而是防Agent自己搞坏数据。Agent不是恶意的但它不稳定。路径遍历和原子写入是保护Agent不搞坏自己的数据Token和哈希是防止Agent被外部干扰。一句话总结Agent系统的安全防护优先级不是防坏人而是防自己。