我正在實施一項服務,我必須提取用戶上傳的zip文件。是否可以限制unix中未壓縮的壓縮文件的大小?
爲了避免磁盤溢出,我必須限制兩個zip文件大小和解壓縮文件大小。
有沒有辦法做到這一點(檢查解壓縮文件的大小)之前解壓? (出於安全原因)。
我使用的是從PHP腳本調用的unix。
我正在實施一項服務,我必須提取用戶上傳的zip文件。是否可以限制unix中未壓縮的壓縮文件的大小?
爲了避免磁盤溢出,我必須限制兩個zip文件大小和解壓縮文件大小。
有沒有辦法做到這一點(檢查解壓縮文件的大小)之前解壓? (出於安全原因)。
我使用的是從PHP腳本調用的unix。
由於您使用的是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
你可能想要把一個極限上的文件的數量爲好,或添加了一定量每個文件,考慮到每個文件的元數據的大小。雖然您無法輕易獲得精確數字,但爲每個文件添加幾百字節至幾千字節是合理的估計。
看起來像[zip_entry_filesize'的官方示例](http://www.php.net/manual/en/function.zip-entry-filesize.php)實際上是一個可以立即使用的函數檢查zipbombs。 – ArjunShankar
不能相信我潛入殼命令,而答案是PHP中的幾行:)我假設shell命令將更加靈活,但這似乎是正確的答案。 –
其中一個zip文件頭包含壓縮文件的未壓縮大小。請參閱http://en.wikipedia.org/wiki/Zip_%28file_format%29#File_headers – Kevin
是不是可以操縱的值?我試圖解決一個安全問題,其中無限的相同字符將被解壓縮到無限的磁盤空間(而zip文件非常小)。 –
CRC值與標題相關聯。在大多數情況下,如果操縱未壓縮的大小,檢查將會失敗。雖然這不是完美的安全性,但我認爲這是最快的方法。 – Kevin