В документации по python рекомендуется не извлекать архив tar без предварительной проверки. Каков наилучший способ убедиться, что архив безопасен с помощью модуля pyfile tarfile? Стоит ли просто перебирать все имена файлов и проверять, содержат ли они абсолютные пути?
Достаточно ли что-то вроде следующего?
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)