Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Расширение загружаемого файла
 
 автор: malish   (21.11.2008 в 16:12)   письмо автору
 
 

Народ вот заитересовало: при загрузке файла на сервер, информация о нем хранится в массиве $_FILES, в элементе type которого хранится MIME тип файла.. Вопрос: как сервак знает MIME тип файла - тупо по расширению или же как то его открывает и проверяет его контент? Спасибо.

  Ответить  
 
 автор: Inviseble_Demon   (21.11.2008 в 20:34)   письмо автору
 
   для: malish   (21.11.2008 в 16:12)
 

MIME конфигурируется браузером (при отправки через браузер)
Так же MIME мозно сконфигурировать самому если отправлять через скрипт.

Сервер просто считывает параметр из MIME и проверки ни какой не производит !

  Ответить  
 
 автор: malish   (22.11.2008 в 13:52)   письмо автору
 
   для: Inviseble_Demon   (21.11.2008 в 20:34)
 

Другими словами если стоит задача проверить тип загружаемого файла, то лучше делать это проверяя MIME нежели расширение файла (с точки зрения надежности)? Правильно я понимаю?

  Ответить  
 
 автор: UnFast   (22.11.2008 в 14:08)   письмо автору
 
   для: malish   (22.11.2008 в 13:52)
 

Лучше проверять расширение файла, так как MIME-TYPE можно легко подделать при передачи файла на твой сервер. А если ты будешь проверять расширение файла, то передача исполняемых программ/скриптов на твой сервер будет исключена.

[поправлено модератором]

  Ответить  
 
 автор: sim5   (22.11.2008 в 14:45)   письмо автору
 
   для: UnFast   (22.11.2008 в 14:08)
 

А расширение нельзя подделать?

  Ответить  
 
 автор: UnFast   (22.11.2008 в 15:22)   письмо автору
 
   для: sim5   (22.11.2008 в 14:45)
 

Расширение подделать можно, ну а толку то 8) Если в скрипте есть фильтр расширений.

  Ответить  
 
 автор: sim5   (22.11.2008 в 15:31)   письмо автору
 
   для: UnFast   (22.11.2008 в 15:22)
 

Оригинально.

  Ответить  
 
 автор: UnFast   (22.11.2008 в 15:57)   письмо автору
 
   для: sim5   (22.11.2008 в 15:31)
 

[поправлено модератором]

  Ответить  
 
 автор: sim5   (22.11.2008 в 15:59)   письмо автору
 
   для: UnFast   (22.11.2008 в 15:57)
 

[поправлено модератором]

  Ответить  
 
 автор: UnFast   (22.11.2008 в 16:23)   письмо автору
 
   для: sim5   (22.11.2008 в 15:59)
 

Не все типы файлов может узнать php. Так как mimе типы можно подделать. Только проверке расширения.

[поправлено модератором]

  Ответить  
 
 автор: sim5   (22.11.2008 в 16:32)   письмо автору
 
   для: UnFast   (22.11.2008 в 16:23)
 

Да за ради бога, проверяйте.

  Ответить  
 
 автор: UnFast   (22.11.2008 в 16:37)   письмо автору
 
   для: sim5   (22.11.2008 в 16:32)
 

[поправлено модератором]

  Ответить  
 
 автор: sim5   (22.11.2008 в 16:43)   письмо автору
 
   для: UnFast   (22.11.2008 в 16:37)
 

Да вот хотелось услышать от вас о супер надежности проверки по расширению, но так и быть, пошел своей дорогой.

  Ответить  
 
 автор: UnFast   (22.11.2008 в 16:54)   письмо автору
 
   для: sim5   (22.11.2008 в 16:43)
 

[поправлено модератором]

  Ответить  
 
 автор: sim5   (23.11.2008 в 11:57)   письмо автору
 
   для: UnFast   (22.11.2008 в 16:54)
 

Уважаемый! Все дело в том, что доверяться расширению файла, да еще уповать на некий супер-фильтр расширений, позволяющий определить тот-ли файл вам загружают или нет, это полная профанация. Единственно надежной проверкой типа загружаемого файла, является проверка его заголовка. Кое что есть в этом направлении, например, загружаемые графические файлы можно проверить по заголовкам, независимо от того какое расширение вы им укажите, и как бы вы не подделывали передаваемый тип.
Кое что можно сделать и по другими типам, если у вас на хосте можно подключить модуль mod_mime_magic (может быть указан в списке как mime_magic_module). Этот модуль определяет MIME-тип, просматривая первые несколько байт файла (заголовок). Этот модуль как "вторая линия обороны" для случаев, когда mod_mime не может определить тип файлов.

  Ответить  
 
 автор: UnFast   (23.11.2008 в 13:44)   письмо автору
 
   для: sim5   (23.11.2008 в 11:57)
 

Я не утверждал, что по расширению, можно опредилить полностью тип файла.
Я сказал, что можно сделать фильтр расширений и запретить передачу исполняемых файлов на сервер. Конечно исполняемый файл может передаться на сервер, если расширение подделать, но исполняться он не будет. Конечно ваш, вариант можно, использовать, но естествено вместе с проверкой расширения, так как не все файлы, можно проверить на валидатность, как картинки например, и mime тоже возможно можно подделать.

[поправлено модератором]

  Ответить  
 
 автор: sim5   (23.11.2008 в 13:48)   письмо автору
 
   для: UnFast   (23.11.2008 в 13:44)
 

Кроме вреда, о котором нужно думать, думайте еще и "мусоре". Будете надеяться на расширение, получите кучу мусора себе на сервер.
Это не мой вариант, а разработчиков, и его нужно использовать.

  Ответить  
 
 автор: malish   (24.11.2008 в 09:13)   письмо автору
 
   для: sim5   (23.11.2008 в 13:48)
 

Ну по идее при выводе картинки через тэг img - даже если там будет исполняемый файл пусть даже с "графическим" раширением, то один хрен он не запустится.. Ведь src атрибут всего лишь пытается показать его а не запустить, так ведь? То есть мы говорим именно о "мусоре"..

  Ответить  
 
 автор: sim5   (24.11.2008 в 09:40)   письмо автору
 
   для: malish   (24.11.2008 в 09:13)
 

Делайте что хотите. Считаете, что достаточно узнать, что в расширении написано .jpg, а значит, если это исполняемый файл, то он не запуститься, а то что мусор мне пофигу... В общем как хотите, так и делайте, я вам не указ.

  Ответить  
 
 автор: malish   (24.11.2008 в 13:20)   письмо автору
 
   для: sim5   (24.11.2008 в 09:40)
 

>Делайте что хотите. Считаете, что достаточно узнать, что в расширении написано .jpg, а значит, если это исполняемый файл, то он не запуститься, а то что мусор мне пофигу...

Думаю тот, кто захочет ломануть сервак сделает это и не важно сколько проверок вы сделаете и каких.. А тех кто по ошибке попытается залить "неправильный" файл - отсекёт простейшая проверка.. Поэтому мусора не будет много.. Разве что какой-нить дибилоид решит принципиально завалить вас таким "мусором".. Поэтому мне кажется что проблема "мусора" не слишком актуальна учитывая что сайт модерируется..

  Ответить  
 
 автор: sim5   (24.11.2008 в 13:48)   письмо автору
 
   для: malish   (24.11.2008 в 13:20)
 

Если уж та то пошло, и вас беспокоит только безопасность, то вредоносный код вообще может не имет никакого расширения, как впрочем может быть помещен и в любой другой файл с любым расширением. А запускать сие будет совсем иное, маленькое, пролезшее совсем в другую дыру, и совсем не туда куда вы файлы складываете.
Что касается расширений, ну коли вам лень проверять как следует, дело ваше, тем более, если вы готовы с веником постоянно проверять свои папки. Делай так как считаете нужным, вас никто не заставляет делать иначе.

  Ответить  
 
 автор: Люстэн   (07.12.2011 в 16:31)   письмо автору
 
   для: malish   (21.11.2008 в 16:12)
 

Не сильно в тему но:

$extension = array_pop(explode(".",$_FILES['avatar']['name']));

Теперь в переменной находится расширение файла.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования