跳到主要內容區塊

計資中心電子報C&INC E-paper

技術論壇

淺談ZipArchive:應用場景及潛在風險
  • 卷期:v0073
  • 出版日期:2025-06-20

作者:陳宥霓 / 臺灣大學計算機及資訊網路中心程式組行政組員


本文介紹ZipArchive是什麼,以及在實務上可以怎麼利用這個類別來使得壓縮檔的新建修改刪除可以更加便利,更延伸討論其中潛在的風險。

 

前言

在資訊爆炸的現在,檔案的大小日漸劇增,為了在傳輸檔案時的便利,也為了更有效的利用儲存空間,資料壓縮技術的出現有效的去解決這個問題,透過精簡的自然語言來使得檔案大小更易於儲存。

而一般對於壓縮檔案的印象是必須先將檔案進行「解壓縮」才能對檔案的內容進行編輯,但你知道其實可以透過程式直接對壓縮檔(特指.zip格式)進行編輯嗎?使用ZipArchive就可以辦到,那我們接下來就開始介紹有關ZipArchive的說明、應用場景及風險吧!

 

關於ZipArchive的應用場景

ZipArchive是C# / .NET中位於System.IO.Compression命名空間的一個類別,用於壓縮、解壓縮,甚至更新、替換檔案內容,其中特別之處是除了可以對於.zip格式進行動作外,也可以對其他的檔案類型,例如.pdf及.docx等檔案進行包含圖片、文字、XML結構的調整。

而這裡也能跟大家補充一個小知識,你有試著將Word檔案變成.zip格式後直接開啟嗎?由於.docx本質上是一種.zip格式,其中包含了XML結構與內嵌的圖檔。實際操作一次試試看,將Word檔的副檔名由例如:文件.docx,直接改為文件.zip,畫面上會彈出「如果您變更副檔名,檔案可能會變成無法使用」,此時勾選”是”,並將文件打開後,可以看到包含被插入在Word中的圖片在media資料夾中,及文字內容確實以XML型式儲存。若更進一步將內容調整,例如替換圖片或是修改文字內容,再將文件副檔名調回.docx檔案時,也能看到剛剛所做的變更喔!

因此,使用ZipArchive可以理解成將檔案以這個格式進行編輯替換後,再將檔案封裝回去,而詳細應用場景我將在下一個段落詳細介紹。

 

ZipArchive的應用場景

將分享並透過兩個實務上會使用到ZipArchive的場景來進行介紹。

第一個場景:有時候我們會遇上需要將範本文件加入使用者輸入的資訊或一些常見自動生成的資訊(例如:時間),甚至是將文件中的圖片檔案進行替換,此時我們就能透過ZipArchive來協助我們做文件的調整。

第二個場景是:在輸出文件時會需要大量下載內容,此時擔心網路流量或是硬碟儲存空間等等的問題,就能利用ZipArchive協助產生壓縮檔案來增加使用者體驗。

那以下我就將依這兩個場景分別進行說明:

利用ZipArchive替換文件中的文字及圖片,首先使用ZipArchiveMode.Update模式使得檔案可以被讀寫與修改壓縮內容,接著用archive.GetEntry("word/media/image1.jpeg")指向原先存在其中的簽名圖檔後將他刪除,再使用archive.CreateEntry("word/media/image1.jpeg")就可以將新的圖檔插入其中。文字的部分也是一樣,配合xmlText.Replace將文字替換掉,而除了新增圖片和文字之外,ZipArchive也可以新增文字或是檔案,只要熟悉.zip格式就能活用幾個方法(CreateEntry、GetEntry、Open、Delete等等)來調整修改你的檔案。

 

 

而另一個利用ZipArchive的使用場景是將檔案進行壓縮,例如一次產生多份報表或是打包下載的功能,使用ZipArchive就可以方便處理大量的檔案,更重要的是可以大幅減少對硬碟的多次讀寫操作,提升系統效能並降低 I/O 壽命消耗。使用ZipArchiveMode.Create模式新建.zip檔案後,將需要打包壓縮的檔案逐一用archive.CreateEntry(fileName)加到.zip當中,如此一來不只效能可以提升,更能幫助提升使用者體驗,甚至可以直接設定多層資料夾或是設定壓縮檔等級,依照需求能再進一步調整。

 

ZipArchive的潛在風險

.zip格式因為格式結構很靈活,ZipArchive可以方便程式設計師對檔案進行壓縮及解壓縮等操作,但同時容易成為有心人士進行攻擊的工具,對壓縮檔案進行一些惡意編輯。例如:將檔案內容進行竄改或植入木馬程式、將惡意腳本或其他執行檔藏入其中,還有可能將壓縮檔中的檔案名稱設定包含../ 等相對路徑,使得解壓縮時產生覆蓋系統或敏感檔案的風險。所以在了解了有這樣的方法之後,也要對於網路上下載的Zip檔案多留一份心一份警覺。除了可以透過來源驗證避免下載不受信任單位所傳出的Zip檔案,也可以設定相關的解壓縮白名單,避免讓可能造成危害的可執行程式(例如:EXE、BAT檔案)透過漏洞溜進來,同時對於路徑相關問題,可以參考檔案路徑清洗避免路徑穿越攻擊。

最後希望這些說明和分享,除了可以對於Zip檔案和ZipArchive類別有多一分認識,更可以了解相關的資安風險問題。

 

參考資料

  • ZipArchive 類別(https://learn.microsoft.com/zh-tw/dotnet/api/system.io.compression.ziparchive?view=net-8.0)