|
|
|
| Народ вот заитересовало: при загрузке файла на сервер, информация о нем хранится в массиве $_FILES, в элементе type которого хранится MIME тип файла.. Вопрос: как сервак знает MIME тип файла - тупо по расширению или же как то его открывает и проверяет его контент? Спасибо. | |
|
|
|
|
|
|
|
для: malish
(21.11.2008 в 16:12)
| | MIME конфигурируется браузером (при отправки через браузер)
Так же MIME мозно сконфигурировать самому если отправлять через скрипт.
Сервер просто считывает параметр из MIME и проверки ни какой не производит ! | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(21.11.2008 в 20:34)
| | Другими словами если стоит задача проверить тип загружаемого файла, то лучше делать это проверяя MIME нежели расширение файла (с точки зрения надежности)? Правильно я понимаю? | |
|
|
|
|
|
|
|
для: malish
(22.11.2008 в 13:52)
| | Лучше проверять расширение файла, так как MIME-TYPE можно легко подделать при передачи файла на твой сервер. А если ты будешь проверять расширение файла, то передача исполняемых программ/скриптов на твой сервер будет исключена.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: UnFast
(22.11.2008 в 14:08)
| | А расширение нельзя подделать? | |
|
|
|
|
|
|
|
для: sim5
(22.11.2008 в 14:45)
| | Расширение подделать можно, ну а толку то 8) Если в скрипте есть фильтр расширений. | |
|
|
|
|
|
|
|
для: UnFast
(22.11.2008 в 15:22)
| | Оригинально. | |
|
|
|
|
|
|
|
для: sim5
(22.11.2008 в 15:31)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: UnFast
(22.11.2008 в 15:57)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: sim5
(22.11.2008 в 15:59)
| | Не все типы файлов может узнать php. Так как mimе типы можно подделать. Только проверке расширения.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: UnFast
(22.11.2008 в 16:23)
| | Да за ради бога, проверяйте. | |
|
|
|
|
|
|
|
для: sim5
(22.11.2008 в 16:32)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: UnFast
(22.11.2008 в 16:37)
| | Да вот хотелось услышать от вас о супер надежности проверки по расширению, но так и быть, пошел своей дорогой. | |
|
|
|
|
|
|
|
для: sim5
(22.11.2008 в 16:43)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: UnFast
(22.11.2008 в 16:54)
| | Уважаемый! Все дело в том, что доверяться расширению файла, да еще уповать на некий супер-фильтр расширений, позволяющий определить тот-ли файл вам загружают или нет, это полная профанация. Единственно надежной проверкой типа загружаемого файла, является проверка его заголовка. Кое что есть в этом направлении, например, загружаемые графические файлы можно проверить по заголовкам, независимо от того какое расширение вы им укажите, и как бы вы не подделывали передаваемый тип.
Кое что можно сделать и по другими типам, если у вас на хосте можно подключить модуль mod_mime_magic (может быть указан в списке как mime_magic_module). Этот модуль определяет MIME-тип, просматривая первые несколько байт файла (заголовок). Этот модуль как "вторая линия обороны" для случаев, когда mod_mime не может определить тип файлов. | |
|
|
|
|
|
|
|
для: sim5
(23.11.2008 в 11:57)
| | Я не утверждал, что по расширению, можно опредилить полностью тип файла.
Я сказал, что можно сделать фильтр расширений и запретить передачу исполняемых файлов на сервер. Конечно исполняемый файл может передаться на сервер, если расширение подделать, но исполняться он не будет. Конечно ваш, вариант можно, использовать, но естествено вместе с проверкой расширения, так как не все файлы, можно проверить на валидатность, как картинки например, и mime тоже возможно можно подделать.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: UnFast
(23.11.2008 в 13:44)
| | Кроме вреда, о котором нужно думать, думайте еще и "мусоре". Будете надеяться на расширение, получите кучу мусора себе на сервер.
Это не мой вариант, а разработчиков, и его нужно использовать. | |
|
|
|
|
|
|
|
для: sim5
(23.11.2008 в 13:48)
| | Ну по идее при выводе картинки через тэг img - даже если там будет исполняемый файл пусть даже с "графическим" раширением, то один хрен он не запустится.. Ведь src атрибут всего лишь пытается показать его а не запустить, так ведь? То есть мы говорим именно о "мусоре".. | |
|
|
|
|
|
|
|
для: malish
(24.11.2008 в 09:13)
| | Делайте что хотите. Считаете, что достаточно узнать, что в расширении написано .jpg, а значит, если это исполняемый файл, то он не запуститься, а то что мусор мне пофигу... В общем как хотите, так и делайте, я вам не указ. | |
|
|
|
|
|
|
|
для: sim5
(24.11.2008 в 09:40)
| | >Делайте что хотите. Считаете, что достаточно узнать, что в расширении написано .jpg, а значит, если это исполняемый файл, то он не запуститься, а то что мусор мне пофигу...
Думаю тот, кто захочет ломануть сервак сделает это и не важно сколько проверок вы сделаете и каких.. А тех кто по ошибке попытается залить "неправильный" файл - отсекёт простейшая проверка.. Поэтому мусора не будет много.. Разве что какой-нить дибилоид решит принципиально завалить вас таким "мусором".. Поэтому мне кажется что проблема "мусора" не слишком актуальна учитывая что сайт модерируется.. | |
|
|
|
|
|
|
|
для: malish
(24.11.2008 в 13:20)
| | Если уж та то пошло, и вас беспокоит только безопасность, то вредоносный код вообще может не имет никакого расширения, как впрочем может быть помещен и в любой другой файл с любым расширением. А запускать сие будет совсем иное, маленькое, пролезшее совсем в другую дыру, и совсем не туда куда вы файлы складываете.
Что касается расширений, ну коли вам лень проверять как следует, дело ваше, тем более, если вы готовы с веником постоянно проверять свои папки. Делай так как считаете нужным, вас никто не заставляет делать иначе. | |
|
|
|
|
|
|
|
для: malish
(21.11.2008 в 16:12)
| | Не сильно в тему но:
$extension = array_pop(explode(".",$_FILES['avatar']['name']));
Теперь в переменной находится расширение файла. | |
|
|
|