有什么方法可以覆盖解压缩中的路径遍历保护?

Hay*_*ech 5 rhel zip

当您尝试使用工作目录(例如../../foo)上方的相对路径解压缩文件时,您会收到以下消息:

warning: skipped "../" path component(s) in ../../foo

inflating: foo
Run Code Online (Sandbox Code Playgroud)

问题是,我们的软件在安装过程中使用相对路径创建这些 zip,如果安装出错,我们将它们解压缩以将所有内容恢复原状。如果用户选择在正常安装目录“上方”存储一些数据文件,我们最终会../datafile在备份中。这应该完全没问题,我们希望解压缩以信任存档并在我们询问时将文件放回原处。不幸的是,我找不到一个选项来告诉unzip不要担心../路径组件并完全按照创建的方式解压缩存档。是否有解压缩选项来执行此操作?

请注意,此时无法更改创建 zip 的方式,因此“不要那样做”是不可接受的答案。我们必须发挥我们得到的那手牌。目标平台是 RHEL 5。

Zac*_*ady 5

这应该可以满足您的要求

unzip -: foo.zip
Run Code Online (Sandbox Code Playgroud)

从手册页

-:[除 Acorn、VM/CMS、MVS、Tandem 之外的所有版本] 允许将存档成员提取到当前“提取根文件夹”之外的位置。出于安全原因,解压缩通常会从提取的文件名称中删除“父目录”路径组件(“../”)。此安全功能(5.50 版的新增功能)可防止解压缩过程中意外将文件写入活动提取文件夹树头之外的“敏感”区域。-: 选项让 unzip 切换回以前的、更自由的行为,以允许精确提取使用“../”组件在当前提取文件夹级别创建多个目录树的(较旧的)档案。此选项不允许显式写入根目录(“/”)。为此,需要将提取目标文件夹设置为根目录(例如 -d / )。但是,当指定 -: 选项时,仍然可以通过在 zip 存档中指定足够的“../”路径组件来隐式写入根目录。使用此选项时要格外小心。