Python ZipFile.testzip() 接受无效的 ZIP 文件

问题描述 投票:0回答:3

我正在使用内置的

ZipFile
和它的
testzip()
方法来验证某些用户提供的 zip 文件是否有效。

不幸的是,ZipFile 似乎应用了额外的启发式方法,因为它接受不直接以 Zip 标头开头的 ZIP 文件

PK\x03\x04
。相反,它似乎在整个文件中搜索这个不需要的标头,因此也接受以二进制“垃圾”开头并附加 ZIP 存档的 ZIP 文件。

有没有办法改变

ZipFile

在某种“严格”模式下,它只接受普通的100%有效的ZIP文件?

环境:Python 3.6(在 Ubuntu 18.04 上)

python python-3.x zip
3个回答
1
投票
testzip 函数

只是测试存档中的所有文件是否具有有效的校验。 许多检查仅在实际打开 zip 条目时(而不是打开 zip 文件时)在

open

方法中完成。 我不知道“严格”模式,但我有一个想法:您也可以认为不包含任何条目或任何无法打开的条目的 zip 文件无效。打赌将文件错误解释为具有有效校验和和可打开文件的条目的 zip 文件的可能性比将文件错误解释为 zip 文件的可能性要小得多。


0
投票

# test if the file has at least some bytes if file_size < 10: raise BadZipFile() # file is too small to be a valid ZIP file with open(uploaded_file, "rb") as f: header = f.read(4) if not header == b'PK\x03\x04': raise BadZipFile()



0
投票
PK\x03\x04

签名将不匹配。如果 zip 文件不包含任何文件,它也不匹配。

    

© www.soinside.com 2019 - 2024. All rights reserved.