Автоматическая загрузка и извлечение архива (zip, rar, targz, tarbz) – проблема безопасности?

StackOverflow https://stackoverflow.com/questions/1903623

  •  19-09-2019
  •  | 
  •  

Вопрос

Я хотел бы создать следующие функции для моего веб-приложения:

  1. пользователь загружает архивный файл (zip/rar/tar.gz/tar.bz и т. д.) (содержимое — несколько файлов изображений)
  2. архив автоматически извлекается после загрузки
  3. изображения отображаются в списке HTML (что угодно)

Есть ли какие-либо проблемы безопасности, связанные с процессом извлечения?Например.возможность выполнения вредоносного кода, содержащегося в загруженных файлах (или в подготовленном архивном файле), или еще?

Это было полезно?

Решение

Помимо возможности использования системы с такими вещами, как переполнение буфера, если это не реализовано должным образом, могут возникнуть проблемы, если вы слепо извлекаете хорошо созданный сжатый файл с большим файлом с избыточными шаблонами внутри (zip-бомба).Сжатая версия очень мала, но при извлечении она займет весь диск, что приведет к отказу в обслуживании и, возможно, к сбою системы.

Кроме того, если вы не будете достаточно осторожны, клиент может передать zip-файл с исполняемым на стороне сервера содержимым (.php, .asp, .aspx, ...) внутри и запросить файл по HTTP, что, если не настроено должным образом, может привести к выполнению произвольного кода на сервере.

Другие советы

В дополнение к ответу Медрдада:Размещать пользовательский контент немного сложнее.Если вы размещаете zip-файл, то его можно использовать для хранения файлов классов Java (также используемых для других форматов), и, следовательно, «политика одного и того же происхождения» может быть нарушена.(Была атака GIFAR, когда zip-архив был прикреплен к концу другого файла, но это больше не работает с Java PlugIn/WebStart.) Файлы изображений следует, по крайней мере, проверять на то, что они действительно являются файлами изображений.Очевидно, что существует проблема с веб-браузерами, имеющими уязвимости переполнения буфера, и теперь ваш сайт может быть использован для атаки на ваших посетителей (это может сделать вас непопулярным).Вы можете найти какое-то клиентское программное обеспечение, использующее, скажем, регулярные выражения для передачи данных, поэтому можно выполнить данные в середине файла изображения.Zip-файлы могут иметь неприличные имена (например, обход каталога с помощью ../ и странные персонажи).

Что делать (не обязательно исчерпывающий список):

  • Файлы, предоставленные пользователем хоста, находятся в совершенно другом домене.
  • Домен с файлами пользователя должен использовать разные IP-адреса.
  • Если возможно, декодируйте и перекодируйте данные.
  • Есть еще один вопрос о переполнении стека по zip-бомбам - я предлагаю распаковать с помощью ZipInputStream и останавливаемся, если он становится слишком большим.
  • Если нативный код касается пользовательских данных, делайте это в тюрьме chroot.
  • Символы белого списка или полная замена имен файлов.
  • Потенциально вы могли бы использовать какой-либо IDS для сканирования подозрительных данных (я действительно не знаю, насколько это делается — убедитесь, что ваш IDS не написан на C!).
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top