我正在实施一项服务,我必须提取用户上传的 zip 文件。
为了避免磁盘溢出,我必须限制 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
您可能还想限制文件的数量,或者为每个文件添加一个恒定的数量,以考虑每个文件的元数据大小。虽然您无法轻易获得准确的数字,但将几百字节添加到每个文件的几千字节是一个合理的估计。