Python Glossary English

Python 3.12+tarfileфункция

tarfile.tar_filter()

фильтры распаковки

Фильтр распаковки 'tar': сохраняет возможности UNIX (ссылки, права), но запрещает пути вне папки и опасные биты.

Синтаксис

tar.extractall(path, filter='tar')  # или tarfile.tar_filter(member, path)

Мягче, чем 'data': символическую ссылку на '/etc/passwd' или наружу он пропускает, и следующий член архива может записать файл через неё — для чужих архивов это дыра. Он срезает ведущий '/', запрещает пути за пределы папки и снимает setuid/setgid и запись для группы и остальных. Подходит для своих бэкапов, где ссылки должны восстановиться.

Примеры

import tarfile
link = tarfile.TarInfo('passwd')
link.type = tarfile.SYMTYPE
link.linkname = '/etc/passwd'
print(tarfile.tar_filter(link, 'out').linkname)  # → /etc/passwd — ссылка пропущена
try:
    tarfile.data_filter(link, 'out')
except tarfile.AbsoluteLinkError:
    print('data отклоняет')  # → data отклоняет

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности