В документации по Python рекомендуется не извлекать tar-архив без предварительной проверки. Каков наилучший способ убедиться, что архив безопасен, используя модуль tarfile python? Должен ли я просто перебирать все имена файлов и проверять, содержат ли они абсолютные пути?
Будет ли достаточно следующего?
import sys
import tarfile
with tarfile.open('sample.tar', 'r') as tarf:
for n in tarf.names():
if n[0] == '/' or n[0:2] == '..':
print 'sample.tar contains unsafe filenames'
sys.exit(1)
tarf.extractall()
Редактировать
Этот скрипт несовместим с версиями до 2.7. cf с и tarfile.
Теперь я перебираю членов:
target_dir = "/target/"
with closing(tarfile.open('sample.tar', mode='r:gz')) as tarf:
for m in tarf:
pathn = os.path.abspath(os.path.join(target_dir, m.name))
if not pathn.startswith(target_dir):
print 'The tar file contains unsafe filenames. Aborting.'
sys.exit(1)
tarf.extract(m, path=tdir)