З дьогтем GNU це просто
tar -xvf untrusted_file.tar
у порожньому каталозі. Гугл GNU автоматично знімає /
імена провідних членів під час вилучення, якщо явно не вказано інше з --absolute-names
опцією . GNU tar також визначає, коли використання ../
призведе до вилучення файлу за межами каталогу toplevel і замість цього помістить ці файли в каталог toplevel, наприклад, компонент foo/../../bar/qux
буде вилучений як bar/qux
у каталозі toplevel, а не bar/qux
в батьківському каталозі версії toplevel . Гугл GNU також піклується про символьні посилання, що вказують за межами каталогу верхнього рівня, наприклад, foo -> ../..
і foo/bar
не спричинятимуть bar
його витяг за межі каталогу верхнього рівня.
Зауважте, що це стосується лише (досить останніх версій) тарілки GNU (а також деяких інших реалізацій, наприклад * BSD tar та BusyBox tar). Деякі інші реалізації не мають такого захисту.
Через символічні посилання захистів, які ви використовуєте, буде недостатньо: архів може містити символічне посилання, що вказує на каталог за межами дерева та витягує файли з цього каталогу. Немає способу вирішити цю проблему виключно на іменах членів, вам потрібно вивчити ціль символічних посилань.
Зауважте, що якщо ви виймаєте каталог, який вже містить символічні посилання, гарантія більше не може діяти.