Kan*_* Li 5 python tar python-2.7
在tarfile.extractall的文档中它说
未经事先检查,切勿从不可信来源提取档案。文件可能是在路径之外创建的,例如具有以“/”开头的绝对文件名或带有两个点“..”的文件名的成员。
网络或 stackoverflow 上的一些帖子解决了这些漏洞,但是,我仍然可以想到另一种情况,例如包含以下两个文件的 tarball:
A --> /etc
A/passwd
Run Code Online (Sandbox Code Playgroud)
条目A
是一个符号链接,下面的任何内容都A
将被重定向到/etc
,网络上的大多数解决方案都无法检测到它。
我的问题是,除此之外,可能还有一些我忽略的其他漏洞,所以即使我有一段代码可以处理这个问题,它可能仍然不安全。有没有成熟的Python库可以安全地提取tarball?
您可以在使用库序列化 tar 存档之前检查其内容tarfile
。例如,从文档中,
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
if tarinfo.isreg():
print("a regular file.")
elif tarinfo.isdir():
print("a directory.")
else:
print("something else.")
tar.close()
Run Code Online (Sandbox Code Playgroud)