Почему там несоответствие типа пантомимы с Firefox, хромом?

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

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

Это это работало на хром, но не Firefox.

if ($_FILES['uploaded']['type']=="audio/mp3")

Это работало на Firefox, но не хром.

$_FILES['uploaded']['type']=="audio/mpeg"

Кто-либо мог объяснить, почему это происходит? Я думал бы, что оба браузера смогут понять или или... Есть ли какие-либо другие браузеры, которые я, возможно, должен был бы взволновать по поводу раздражительных типов пантомимы как они?

Править: Если, что предложенный Pekka верен, каков был бы лучший способ проверить на определенный тип пантомимы?

6
задан hakre 7 July 2012 в 11:49
поделиться

2 ответа

Согласно w3schools , audio / mpeg является правильным типом.Но это не имеет значения, типы MIME могут быть разными, на них категорически нельзя полагаться при проверке файлов. Несоответствия - это правило, и этого следует ожидать.

Чтобы идентифицировать файл MP3, возможно, вам поможет пакет getid3 :

getID3 () - это PHP-скрипт, который извлекает полезную информацию из MP3 и других форматов мультимедийных файлов.

Изменить: У IANA есть официальный список типов MIME здесь . Там нет упоминания о mp3, так что это ошибочное поведение со стороны Chrome.

Правка 2: Лучше всего на стороне сервера определить MIME-тип файла с расширением finfo . Он пытается определить тип файла путем «анализа содержимого», ища конкретные характеристики определенных типов файлов в первых нескольких байтах данных. В этом процессе типы MIME также могут различаться, но, по крайней мере, они согласованы на одном сервере, поэтому у вас больше не будет проблем с браузером.

5
ответ дан 17 December 2019 в 02:28
поделиться

Каждый браузер может реализовывать стандарты W3c немного по-разному, к большому огорчению всех разработчиков (#rant) ...

Полагаться на метаинформацию, генерируемую пользователем / браузером, крайне ненадежно и не рекомендуется. Если это ваш единственный механизм безопасности / работоспособности, то кто-то, желающий нанести вред вашей системе, может вручную ввести поле метатипа с помощью специального запроса на == "audio / mpeg", а затем загрузить любой исполняемый файл. Если вы действительно хотите быть уверены, что вы должны полностью изучить данные на стороне сервера после того, как они были загружены, прежде чем принимать их в свою постоянную систему хранения / производства. Или о менее зловещем примечании ... пользователь с другим браузером, который вы ранее не тестировали, может захотеть загрузить законный mp3-файл, но он может не объявлять свой тип mime как audio / mpeg или audio / mp3, и тогда вы откажетесь от доступа в систему ...

3
ответ дан 17 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: