Python中如何安全地提取不受信任的tarball

5
tarfile.extractall文档中提到:

不要在未经检查的来源中提取归档文件。 可能会在路径之外创建文件,例如以“ /”开头的绝对文件名或具有两个点“..”的文件名。

网上或stackoverflow上的一些帖子解决了这些漏洞,但是我仍然可以想到另一种情况,例如具有以下两个文件的tarball:

A --> /etc
A/passwd

A入口是一个符号链接,其中任何内容都将被重定向到/etc,这在大多数网络解决方案中无法检测到。

我的问题是,除此之外,我可能忽略了一些其他漏洞,因此即使我有处理此问题的代码,它仍然可能不安全。是否有一个成熟的Python库可以安全地提取tarball?


在虚拟操作系统中打开? - stackoverfloweth
1
@stackoverfloweth,那太重了。 - Kan Li
1个回答

0

在使用 tarfile 库序列化之前,您可以检查 tar 存档的内容。例如,从 docs 中了解更多。

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接