AI загружает ZIP: как не распаковать файл за пределы каталога
Проверяйте путь каждого элемента архива до записи и ограничивайте сам исполнитель. Имя внутри ZIP — недоверенное значение; объединение строки с каталогом назначения ещё не удерживает файл внутри этого каталога.
Где появляется ошибка
Помощник принимает архив проектной документации. В обычном архиве находятся docs/intro.txt и docs/setup.txt. В другом появляется элемент с переходом в родительский каталог. Самодельный загрузчик перебирает имена и сохраняет каждое по пути «папка обработки плюс имя». В результате файл может попасть вне рабочей области. Эта ошибка возникает ещё до извлечения текста и обращения к модели; просьба агенту соблюдать границы её не исправляет.
Рабочее решение
Составьте политику допустимых элементов: относительные пути, ожидаемые типы, отсутствие выхода за рабочую область и запрещённых ссылок. Проверяйте правила для целевой ОС, включая абсолютные пути, разделители и особенности дисков. Не переносите предположение между интерфейсами библиотеки: Python отдельно предупреждает, что zipfile.Path не очищает имена так же, как extract и extractall. Используйте подходящий проверенный механизм, но не называйте его полной защитой от всех архивных угроз. Распаковывайте в отдельную область с минимальными правами.
Контрольные случаи
| Проверка | Ожидаемое поведение |
|---|---|
| Обычный вложенный файл документации | Он появляется только внутри назначенной области; исходный путь сохраняется как проверенные метаданные. |
| Элемент пытается выйти в родительский каталог | Обработка отклоняется до записи; ни один контрольный файл за пределами области не создан и не изменён. |
| Архив содержит абсолютный путь или ссылочный элемент | Действует заранее заданная политика, а не случайное поведение текущей ОС или используемой функции распаковки. |
Проверка путей не ограничивает распакованный объём и время работы. Эти лимиты нужны отдельно. Если есть другие процессы, меняющие каталоги одновременно, строковой проверки пути тоже недостаточно: требуется защита файловых операций и изоляция среды.
Безопасность AI-сервиса включает подготовку вложений: ошибка загрузчика способна обойти любые ограничения промпта. В платном курсе LLM Security PRO: Prompt Injection, утечки, tool-abuse можно продолжить изучение соответствующего инженерного направления. Перед покупкой сравните программу и открытые материалы со своей задачей.
Документация для проверки технических деталей: Документация Python zipfile.
Следующий шаг: Безопасность LLM-приложений: практические проверки. По смежным вопросам: Память AI-агента: как не сохранить чужую команду навсегда, HTML из ответа LLM: как не превратить чат в XSS.
