2012-09-06 127 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命令将更加灵活,但这似乎是正确的答案。 –

相关问题