Deprecated: Function create_function() is deprecated in /var/www/smart-core.org/web/task/includes/class.flyspray.php on line 113 Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /var/www/smart-core.org/web/task/vendor/adodb/adodb-php/adodb.inc.php on line 1167 Deprecated: Function create_function() is deprecated in /var/www/smart-core.org/web/task/includes/class.user.php on line 115 FS#213 : Безопасная загрузка файлов (PHP, JS, HTML...)

Bundles

  • Status Новая
  • Percent Complete
    0%
  • Task Type Сделать
  • Category MediaBundle
  • Assigned To No-one
  • Operating System
  • Severity Medium
  • Priority Very Low
  • Reported Version
  • Due in Version Undecided
  • Due Date Undecided
  • Votes
  • Private
Attached to Project: Bundles
Opened by Артём - 19 Sep 2011
Last edited by Артём - 14 May 2012

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

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

Deprecated: Function create_function() is deprecated in /var/www/smart-core.org/web/task/includes/class.user.php on line 115
Алексей commented on 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 байта файла и сверять их с сигнатурой.

Loading...

Available keyboard shortcuts

Tasklist

Task Details

Task Editing