有什麼方法可以覆蓋解壓縮中的路徑遍歷保護嗎?

有什麼方法可以覆蓋解壓縮中的路徑遍歷保護嗎?

當您嘗試使用工作目錄上方的相對路徑(例如 )解壓縮檔案時../../foo,您會收到以下訊息:

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

inflating: foo

問題是,我們的軟體在安裝過程中使用相對路徑建立這些 zip,如果安裝出錯,我們會解壓縮它們以將所有內容恢復原樣。如果使用者選擇在正常安裝目錄「上方」儲存一些資料文件,我們最終會得到../datafile備份。這應該完全沒問題,我們希望 unzip 信任存檔並在需要時將文件放回原處。不幸的是,我找不到一個選項來告訴unzip我不要擔心../路徑組件並按照創建時的樣子解壓縮存檔。有沒有解壓縮選項來執行此操作?

請注意,目前無法更改 zip 的創建方式,因此「不要那樣做」不是可接受的答案。我們必須發揮我們所得到的牌。目標平台是 RHEL 5。

答案1

這應該可以滿足您的要求

unzip -: foo.zip

從手冊頁

-:[除 Acorn、VM/CMS、MVS、Tandem 之外的所有版本] 允許將存檔成員提取到目前「提取根資料夾」之外的位置。出於安全原因,解壓縮通常會從提取的檔案名稱中刪除“父目錄”路徑元件(“../”)。此安全功能(5.50 版的新增功能)可防止解壓縮過程中意外將檔案寫入活動擷取資料夾樹頭以外的「敏感」區域。 -: 選項讓 unzip 切換回先前的、更自由的行為,以允許精確提取使用「../」元件在目前提取資料夾層級建立多個目錄樹的(較舊的)檔案。此選項不允許明確寫入根目錄(“/”)。為此,需要將提取目標資料夾設定為根目錄(例如 -d / )。但是,當指定 -: 選項時,仍然可以透過在 zip 檔案中指定足夠的「../」路徑元件來隱式寫入根目錄。使用此選項時要格外小心。

相關內容