Чтобы получить MIME-тип, разработчики обычно зависят от $_FILE['input_name']['type']
. Но это абсолютно уязвимо. Поскольку злонамеренный пользователь может установить один из image/jpg
, image/png
, image/gif
et c. MIME печатает на файл, который на самом деле не является изображением. В этом случае злонамеренный пользователь может получить ваш скрипт для загрузки другого файла вместо изображения и выполнить ваш скрипт для своих целей, что опасно.
Поэтому я рекомендую вам не зависит от следующего фрагмента, чтобы получить MIME файла
$_FILE['input_name']['type'];
Скорее, я бы рекомендовал использовать эту функцию mime_content_type()
для получения типа MIME, но с помощью встроенной функции других PHP. И это is_uploaded_file()
функция. Что он делает:
Это полезно, чтобы гарантировать, что злонамеренный пользователь не попытался обманом заставить скрипт работать с файлами, с которыми он не должен работать - например, / etc /passwd.
Такая проверка особенно важна, если есть вероятность, что что-либо, сделанное с загруженными файлами, может раскрыть их содержимое пользователю или даже другим пользователям в той же системе.
Таким образом, для правильной работы этой функции необходим специфицированный c аргумент . Проверьте код ниже:
if (is_uploaded_file($_FILE['input_name']['tmp_name'])) {
// do other stuff
}
Эта функция возвращает true
в случае успеха, false
в противном случае. Так что если он вернет true
, то с файлом все в порядке. Благодаря этой функции. Теперь в игру вступает функция mime_content_type()
. Как? Посмотрите на код ниже:
if (is_uploaded_file($_FILE['input_name']['tmp_name'])) {
// Notice how to grab MIME type
$mime_type = mime_content_type($_FILE['input_name']['tmp_name']);
// If you want to allow certain files
$allowed_file_types = ['image/png', 'image/jpeg', 'application/pdf'];
if (! in_array($mime_type, $allowed_file_types)) {
// File type is NOT allowed
}
// Set up destination of the file
$destination = '/path/to/move/your/file/';
// Now you move/upload your file
if (move_uploaded_file ($_FILE['input_name']['tmp_name'] , $destination)) {
// File moved to the destination
}
}
Кстати, для новичка , не пытайтесь использовать удаленный URL с этой функцией, чтобы получить MIME-тип. Код ниже не будет работать:
mime_content_type('http://www.example.com/uploads/example.png');
Но приведенный ниже код будет работать:
mime_content_type('/source/to/your/file/etc.png');
Надеюсь, вам понравится загружать файл с этого момента.