2009-11-16 4 views
5

Кто-нибудь знает, как использовать атрибут accept во входных тегах? Я вижу, что это задокументировано, но w3schools указывает, что он не поддерживается ни одним из основных браузеров. Тестирование также подтверждает это.Почему основные браузеры не поддерживают HTML-атрибуты ACCEPT для типа ввода = «файл»?

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

Редактировать: Я полностью осведомлен о последствиях безопасности только для проверки на стороне клиента. Я не намерен удалять проверку на стороне сервера, и я ищу способ улучшить удобство использования.

+1

Даже если он будет поддерживаться, это не спасет вас от проверки ввода на стороне сервера. – Gumbo

+2

+1 для удобства использования!Ожидание 40 секунд для того, чтобы загрузить только, чтобы быть сказанным, что это недостаточно хорошо, не самый большой пользовательский опыт. – Rob

+0

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

ответ

3

Причина, по которой браузеры фактически не реализуют атрибут ACCEPT, заключается в том, что проверка типа MIME является наукой и не просто такой простой, как чтение расширения файла. Даже на стороне сервера MIME тип проверки может быть сложно, как было отмечено MediaWiki:

http://www.mediawiki.org/wiki/Manual:Mime_type_detection

Обратите внимание, что они попытка проверить тип MIME, даже на стороне сервера.

0

Поддержка этого тега будет означать реализацию способа для браузера определять тип MIME локального ресурса, и это может привести к значительному эвристике и возможной подверженности инъекциям кода и/или другим уязвимостям, которые уже существуют в браузерах их справедливая доля.

1

Наиболее педантичный причина заключается в том, что это не required by спецификации HTML4 (курсив мой):

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

Это дополнительная функция.

Я лично хотел бы это увидеть. Например, при наличии image/* браузер может отображать библиотеку фотографий пользователя в качестве местоположения по умолчанию и использовать большие значки. text/* может перейти в папку документов и т. Д. Мобильные браузеры, такие как iPhone, которые обычно не позволяют загружать файлы вообще, могут использовать это, чтобы отобразить галерею, когда форма ожидает изображение. Мы могли бы сходить с ума и при необходимости подключиться к сканеру. Возможности безграничны.

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

3

Этот атрибут поддерживается каждым основным браузером. Полезные ссылки are-- caniuse.com

w3 schools browser support for accept attriute

Думал, что это будет полезно для тех, кто хочет знать о поддержке браузера из HTML accept атрибута.