Python 3.12+tarfileфункция
tarfile.fully_trusted_filter()
фильтры распаковки
Фильтр распаковки 'fully_trusted': возвращает член без изменений — архиву доверяют полностью.
Синтаксис
tar.extractall(path, filter='fully_trusted')
Так tarfile распаковывал всегда до Python 3.14, и на 3.12–3.13 вызов extractall() без filter выдаёт DeprecationWarning ровно потому, что работает этим фильтром. С ним '../x', абсолютные пути и ссылки наружу пишут куда угодно — это и есть path traversal. Брать его стоит только для архивов, которые вы создали сами.
Примеры
import tarfile
m = tarfile.TarInfo('../outside.txt')
print(tarfile.fully_trusted_filter(m, 'out') is m) # → True — член не тронут
try:
tarfile.data_filter(m, 'out')
except tarfile.OutsideDestinationError:
print('data не пустит наружу') # → data не пустит наружу
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности