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Сообщить о неточности