Есть ли способ обойти защиту обхода пути при распаковке?

Есть ли способ обойти защиту обхода пути при распаковке?

При попытке распаковать файл с относительными путями выше рабочего каталога (например, ../../foo), вы получаете следующее сообщение:

warning: skipped "../" path component(s) in ../../foo

inflating: foo

Проблема в том, что наше программное обеспечение создает эти zip-файлы с относительными путями во время установки, и если установка идет не так, мы распаковываем их, чтобы вернуть все как было. Если пользователь решил сохранить некоторые файлы данных «выше» обычного каталога установки, мы оказываемся ../datafileв резервной копии. Это должно быть совершенно нормально, и мы хотим, чтобы unzip доверял архиву и вернул файлы обратно, если мы попросим. К сожалению, я не могу найти опцию, чтобы сказать unzipне беспокоиться о ../компонентах пути и распаковать архив именно так, как он был создан. Есть ли опция unzip, чтобы сделать это?

Обратите внимание, что изменить способ создания zip-файлов в настоящее время невозможно, поэтому ответ «Не делайте этого таким образом» неприемлем. Придется играть тем, что нам дали. Целевая платформа — RHEL 5.

решение1

Это должно сделать то, о чем вы просите.

unzip -: foo.zip

Из страницы руководства

-: [все, кроме Acorn, VM/CMS, MVS, Tandem] позволяет извлекать элементы архива в местоположения за пределами текущей ''корневой папки извлечения''. По соображениям безопасности unzip обычно удаляет компоненты пути ''parent dir'' (''../'') из имен извлекаемых файлов. Эта функция безопасности (новая для версии 5.50) предотвращает случайную запись файлов unzip в ''чувствительные'' области за пределами активной головки дерева папки извлечения. Параметр -: позволяет unzip вернуться к предыдущему, более либеральному поведению, чтобы разрешить точное извлечение (старых) архивов, которые использовали компоненты ''../'' для создания нескольких деревьев каталогов на уровне текущей папки извлечения. Этот параметр не позволяет явно записывать в корневой каталог (''/''). Для этого необходимо установить целевую папку извлечения в root (например, -d / ). Однако, когда указана опция -:, все еще возможно неявно записывать в корневой каталог, указав достаточное количество компонентов пути ''../'' внутри zip-архива. Используйте эту опцию с особой осторожностью.

Связанный контент