我正在实施一项服务,我必须提取一个由用户上传的zip文件。
为了避免磁盘溢出,我必须限制BOTH zip文件大小和解压缩文件大小。
无论如何都要这样做(检查解压缩的文件大小)解压之前? (出于安全原因)。
我正在使用从PHP脚本调用的unix。
答案 0 :(得分: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
您可能还希望对文件数量进行限制,或者为每个文件添加一个常量,以考虑每个文件的元数据大小。虽然你不能轻易得到一个精确的数字,但每个文件增加几百字节到几千字节是一个合理的估计。