Zip
如何將 zip 重新打包為 7zip?
如何安全快速地將 zip 存檔重新打包為 7zip 存檔?
我檢查了 7zip 程序的選項,但沒有看到任何重新打包的選項。我知道我可以解壓到目錄然後打包這個目錄,但它安全嗎?如果 ZIP 具有“../../file.exe”或“/etc/bin/file.exe”之類的路徑怎麼辦?
我嘗試將文件解壓縮到標準輸出,雖然程序 7zip 可以做到這一點,但它只輸出不帶文件名的文件內容等。所以我不能只是抓住這個輸出並重定向到某個地方打包到一個 7zip 存檔中。
您需要將它們解壓縮到一個臨時目錄。
據
unzip (1)
,出於安全原因,解壓縮通常會從提取文件的名稱中刪除“父目錄”路徑組件(“../”)。此安全功能(版本 5.50 的新功能)可防止解壓縮意外將文件寫入活動提取文件夾樹頭之外的“敏感”區域。
因此,雖然它可能是安全的,但您的結果
7z
可能會以不同的方式排列文件,或者如果文件名重複,甚至會失去。這是一個範例腳本,但它忽略了
..
絕對路徑問題:#!/bin/sh set -e if [ "$1" == "" -o "$2" == "" ] then echo Usage: $0 archive.zip archive.7z exit 1 fi scratch=`mktemp -d` trap "rm -rf $scratch" EXIT in=`readlink -f $1` out=`readlink -f $2` if [ -f $out ] then echo $out exists. exit 2 fi unzip -d"$scratch" "$in" cd "$scratch" 7z a "$out" .