如何使用PHP检测拉链炸弹?

时间:2012-11-07 22:31:59

标签: php zip

我正在创建一个PHP脚本,用于检索用户提供的zip文件,解压缩它,并使用ZipArchive对象对其中的文件执行一些操作。我怎样才能避免像42.zip这样的拉链炸弹?

1 个答案:

答案 0 :(得分:1)

查看zip_entry_filesize:http://php.net/manual/en/function.zip-entry-filesize.php

它应该为您提供.zip文件中未压缩存档的实际大小。以下是手册页注释中提供的示例函数:

function get_zip_originalsize($filename) {
    $size = 0;
    $resource = zip_open($filename);
    while ($dir_resource = zip_read($resource)) {
        $size += zip_entry_filesize($dir_resource);
    }
    zip_close($resource);

    return $size;
}

$size = get_zip_originalsize('file.zip');
echo "original size: $size bytes\n";