Codex 交付 ZIP 项目后,解压前怎样查出越界路径与同名覆盖
ZIP 能被打开,只说明格式可读,不说明成员适合解压到项目目录。AI 交付包可能带有 ../notes.txt,也可能同时放入 docs/a.txt 与 docs/./a.txt。前者越出目标目录,后者归一后指向同一位置。验收应先读目录表,得出允许和拒绝清单,再决定是否进入解压步骤。
把路径策略写在解压之前
本文采用跨平台的保守合同:反斜杠先视为路径分隔符;绝对路径、盘符形式、任何上级目录片段都拒绝;点目录和重复分隔符归一后比较。面向 Windows 交付时再使用大小写不敏感键发现冲突。这是项目策略,不是 ZIP 格式对所有平台的统一规定。Linux 上可区分的大小写文件,在目标平台可能仍需改名。
目录成员也要与普通文件分别记录,不能把目录占位项当成空文件覆盖。样本只处理常规文件名,不实现完整的 Windows 设备名、备用数据流及 Unicode 文件系统规则。遇到不支持的名字应转人工复核,不能宣称四个样本覆盖了所有解压风险。
在内存中做四组对照
正常组只有 src/main.py,预期允许。越界组包含 ../outside.txt,盘符组包含 C:\temp\x.txt,预期分别标出上级片段和盘符。冲突组把 docs/a.txt 与 docs/./a.txt 放在同一个包内,第一条的独立路径检查可以通过,但全包冲突检查必须拒绝该目标组,不能因为其中一条先出现就默认保留它。
检查器用 Python 的内存字节流创建 ZIP,并调用成员枚举接口,没有把异常成员解压到磁盘。参考结果保留原始名称、归一目标和拒绝理由。还应记录未压缩大小与压缩大小;本文没有用一个虚构的通用压缩比上限替代项目的资源预算。真实项目需根据磁盘、文件数量和解压时限另设配额。
为什么“自动修掉上级路径”不可靠
把 ../outside.txt 简单改成 outside.txt 会改变交付内容的含义,并可能与包内原本的同名文件撞在一起。改名不是只读审计的职责。收到拒绝记录后,应让交付者重新打包,或人工指定新的目标路径并重新审核全包,而不是边解压边修字符串。
Python zipfile 文档对不可信归档的处理有明确提醒。即使路径预检通过,成员内容仍可能包含不可执行的脚本、错误依赖或与任务无关的数据。本文的通过结论仅指演示路径策略满足要求;它不授权执行包里的安装程序,也不证明项目本身运行正确。实际解压器应继续执行自己的路径和类型保护,避免预检与使用阶段的规则漂移。
配套文件与依据
本文的合成输入和参考结果可下载独立样本 a002.json,离线检查器 a002.py与样本放在同一目录后运行。检查器不调用模型接口。 使用 Python 3.12 或兼容版本,将上述文件下载到同一目录,执行 python a002.py。
一手资料1。资料核对日期:2026-10-24。
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。