Автоматическая загрузка и извлечение архива (zip, rar, targz, tarbz) - проблема безопасности? - PullRequest
5 голосов
/ 15 декабря 2009

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

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

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

Ответы [ 2 ]

7 голосов
/ 15 декабря 2009

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

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

3 голосов
/ 15 декабря 2009

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

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

  • Размещайте предоставленные пользователем файлы в совершенно другом домене.
  • Домен с пользовательскими файлами должен использовать разные IP-адреса.
  • Если возможно, декодируйте и перекодируйте данные.
  • Есть еще один вопрос о стеке потока на zip-бомбах - я предлагаю распаковать его, используя ZipInputStream, и остановиться, если он станет слишком большим.
  • Там, где нативный код касается пользовательских данных, делайте это в изолированной среде.
  • Символы белого списка или полностью заменяющие имена файлов.
  • Потенциально вы можете использовать IDS некоторого описания для сканирования на наличие подозрительных данных (я действительно не знаю, сколько это будет сделано - убедитесь, что ваш IDS не написан на C!).
...