是否可以限制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