Bundles

  • Состояние Новая
  • Завершенность
    0%
  • Тип задачи Сделать
  • Категория MediaBundle
  • Кому назначена: Никому
  • Операционная система
  • Критичность Средне
  • Приоритет Обычный
  • Обнаружена в версии
  • Ожидается в версии Не решено
  • Ожидается к дате Не решено
  • Голосов за задачу
  • Частная задача
Принадлежит проекту: Bundles
Кем открыта: Артём - 19 Sep 2011
Последним редактировал Артём - 14 May 2012

FS#213 - Безопасная загрузка файлов (PHP, JS, HTML...)

Надо по контенту файла вычислять какой файл каким является, чтобы не допустить нежелательные загрузки скриптов.

Алексей прокомментировал 19.09.2011 19:09

================PHP определение типа файла
Как известно, все загружаемые на сервер файлы нужно проверять на соответствие разрешенным mime-type. Большинство программистов проверяют это соответствие, сверяясь с mime-типом из $_FILES, но этот mime-тип берется из заголовков HTTP запроса и может быть определен неправильно, т.к. определяет его браузер. У меня например, некоторые jpeg-файлы определяются как application/octet-stream и естественно, скрипт их не принимает. К тому же решение построенное на проверке mime-типа из HTTP заголовка потенциально опасно, т.к. заголовки можно подделать и указать любой mime-тип.

Как же сделать правильно?

Нужно установить расширение PECL, которое называется Fileinfo. Это расширение является заменой более старого расширения mime_magic. Валидатор MimeType в Zend Framework использует именно Fileinfo, как наиболее приоритетный способ определения mime-типа. Fileinfo определяет mime-тип по специальным сигнатурам, которые есть внутри файла.

Другой способ состоит в том, чтобы переложить определение mime-типа на веб-сервер. У веб-сервера Apache есть специальный файл magic с сигнатурами, с помощью которого он определяет, какого mime-типа является загружаемый файл, и устанавливает это значение в заголовок. Таким образом, в php скрипт придет верный mime-тип.

Для того, чтобы, Apache определял mime-тип файла, нужно включить модуль mod_mime_magic.

собственно основной принцип, ну или если ненужно особо стандартное решение и расширяемое можно просто проверять первые 2 байта файла и сверять их с сигнатурой.

Загрузка...

Available keyboard shortcuts

Список задач

Task Details

Task Editing