А как вы проверяете mime-type файлов в php?
08.03.2010 by Ouch! - 6 CommentsPosted in Без рубрики
Как известно, все загружаемые на сервер файлы нужно проверять на соответствие разрешенным 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.
Небольшой офф: не забывайте так же проверять тип файлов еще и по расширению.