2012-09-06 129 views
1

我正在實施一項服務,我必須提取用戶上傳的zip文件。是否可以限制unix中未壓縮的壓縮文件的大小?

爲了避免磁盤溢出,我必須限制兩個zip文件大小和解壓縮文件大小。

有沒有辦法做到這一點(檢查解壓縮文件的大小)之前解壓? (出於安全原因)。

我使用的是從PHP腳本調用的unix。

+1

其中一個zip文件頭包含壓縮文件的未壓縮大小。請參閱http://en.wikipedia.org/wiki/Zip_%28file_format%29#File_headers – Kevin

+0

是不是可以操縱的值?我試圖解決一個安全問題,其中無限的相同字符將被解壓縮到無限的磁盤空間(而zip文件非常小)。 –

+0

CRC值與標題相關聯。在大多數情況下,如果操縱未壓縮的大小,檢查將會失敗。雖然這不是完美的安全性,但我認爲這是最快的方法。 – Kevin

回答

1

由於您使用的是PHP,因此請使用它的ZipArchive庫。

$zip = zip_open($file); 
$extracted_size = 0; 
while (($zip_entry = zip_read($zip))) { 
    $extracted_size += zip_entry_filesize($zip_entry); 
    if ($extracted_size > $max_extracted_size) { 
     // abort 
    } 
} 
// do the actual unzipping 

你可能想要把一個極限上的文件的數量爲好,或添加了一定量每個文件,考慮到每個文件的元數據的大小。雖然您無法輕易獲得精確數字,但爲每個文件添加幾百字節至幾千字節是合理的估計。

+1

看起來像[zip_entry_filesize'的官方示例](http://www.php.net/manual/en/function.zip-entry-filesize.php)實際上是一個可以立即使用的函數檢查zipbombs。 – ArjunShankar

+0

不能相信我潛入殼命令,而答案是PHP中的幾行:)我假設shell命令將更加靈活,但這似乎是正確的答案。 –

相關問題