Можем ли мы прочитать информацию заголовка файла в PHP, чтобы определить тип загруженного файла ?.
Я не хочу полагаться на $_FILES['control_name_from_client']['type'].
Как известно, это свойство определяет тип файла, считывая расширение загруженного файла.
Что делать, если пользователь переименовывает, скажем test.jpg -> test.xls . В этом случае $_FILES['control_name_from_client']['type']
покажет тип как application / vnd.ms-excel вместо image / jpeg . Естественно, это может создать проблемы, если необходимо выполнить код, который считывает файл XLS для извлечения данных для некоторой обработки.
Любые предложения, пожалуйста?
Попробуйте finfo_file()
. Вы должны называть это передачей пути к файлу. Пример:
$finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $_FILES['control_name_from_client']['tmp_name']); finfo_close($finfo);
Вам нужно расширение Fileinfo
. Как написано в руководстве PHP:
Функции в этом модуле пытаются угадать тип содержимого и кодировку файла путем поиска определенных последовательностей магического байта в определенных положениях файла. Хотя это не пуленепробиваемый подход, используемые эвристики делают очень хорошую работу.
насколько мне известно, такой функции нет в PHP, но если у вас есть доступ к CLI (и работает под управлением Linux), вы можете использовать команду «file» через system ().
Раньше было расширение mime_magic в более старых версиях PHP, но теперь это устарело в пользу finfo_file , который использует сигнатуры файлов для проверки типа файла, а не только расширения.
Dunno, что «заголовок», о котором вы говорите, но с точки зрения безопасности единственное, на что вы действительно должны обратить внимание, это расширение имени файла .
Просто потому, что ваш веб-сервер будет судить о вашем файле.
Чтобы проверить, являются ли загруженные файлы действительными данными для какого-либо конкретного приложения, вы должны использовать эту прикладную программу, в PHP нет универсального инструмента. вы можете использовать imagemagick для изображений, getid3 для mp3-файлов, fffmpeg для фильмов и так далее.
Но, конечно, весь файл должен быть использован, проверка только «заголовка» не гарантирует, что весь файл действителен.