2012-07-03 5 views
2

Каков наилучший способ определения типа или типа mime, прекращения любого проникновения вредоносного кода и устранения ошибки в вашей системе.Лучший способ типа Mime

В моем примере мне нужен способ скрининга, так что .mp3 загружается на сайт. Теперь я знаю, что есть mime_content_type, но это дает нечетные результаты в зависимости от того, как был создан файл и какой браузер вы используете, поскольку он получает свои данные из браузера, по крайней мере, так я это понимаю.

это мой код для идентификации с использованием типа mime.

if(mime_content_type_new($_FILES["userfile"]) == 'audio/mpeg') { do stuff } 

то есть с помощью командной строки Unix и интерпретации, которые

$fileinfo = exec("file -b 'song.mp3'"); echo $filinfo; 

это выдает что-то вроде этого.

Аудио файл с ID3 версии 2.3.0, содержит: MPEG АТД, слой III, V1, 192 кбит, 44,1 кГц, стерео

поэтому мы можем перебирать и проверить этот матч к т наш тип файла.

$fileinfo = exec("file -b 'song.mp3'"); 
$filewewant = "MPEG"; 
$mpeg = stripos($fileinfo, $filewewant); 
$filewewant = "layer III"; 
$mpeg3 = stripos($fileinfo, $filewewant); 

if ($mpeg !== False & $mpeg3 !== False) 
    { echo "success"; }; 

таким образом, кажется, работает лучше, независимо от имени абонента (например, как он переименовал его .png), но требует файл будет сохранен первый сортируют до конца, и не работает на окнах.

Я также указал на http://pear.php.net/package/MIME_Type

Кто-нибудь еще есть лучший способ сделать это? Каков правильный способ определить, какие файлы загружаются на ваш сервер?

+1

Возможный дубликат [Как получить тип содержимого файла в PHP?] (Http://stackoverflow.com/questions/1232769/how-to-get-the-content-type-of-a- файл-в-PHP). Сказав это, я бы приветствовал более полные ответы здесь ... – deceze

+0

Я не видел этого, когда смотрел, ссылается на mime-types allot, просто пытаясь выяснить, какие альтернативы есть с течением времени (глядя на дату) –

ответ

1

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

Это именно то, что делают mime_content_type_new и ваша команда UNIX, поэтому никаких проблем нет. Не знаете, что вы подразумеваете под «лучшим» способом, вы делаете это правильно.

Если вы получаете разные результаты типа MIME из-за проблемы с браузером, вероятно, вы должны создать массив допустимых значений и проверить его с помощью метода in_array().

Я бы не рекомендовал оставлять проверки типа MIME подобным образом в руках клиентского кода, особенно когда безопасность является большой проблемой. Клиент имеет доступ к коду, поэтому его гораздо проще обмануть.

Вы можете, однако, выполнить проверку как на стороне клиента, так и на стороне сервера. Это позволит сэкономить вам пропускную способность от плохих загрузок, но при этом защитит систему от вредоносных пользователей.

Вот хороший учебник по API-интерфейсу Javascript и обработка изображений с помощью Javascript.

http://www.html5rocks.com/en/tutorials/file/dndfiles/

Приветствия.

+0

спасибо за информацию и учебник. Мне нравится идея обеих сторон, вы правы в том, чтобы поддерживать ее на стороне сервера для обеспечения безопасности, а клиентскую сторону - ограничивать пропускную способность. Не думал об этом так, упс. –

0

Это, возможно, не доказательство (только новые/текущие браузеры), но новый API-интерфейс javascript FILE позволяет читать MIME-TYPE без загрузки файла. Для любой проверки на стороне сервера вы должны загрузить файл ->, и вы должны проверить их.

+0

спасибо, я посмотрю, что –