Когда следует использовать HTTP-заголовок "X-Content-Type-Options: nosniff",
Я провел тесты на проникновение с использованием OWASP ZAP, и он вызывает следующее предупреждение для всех запросов: X-Content-Type-Options Header Missing
.
Я понимаю заголовок и почему это рекомендуется. Это очень хорошо объясняется в qaru.site/info/220972/....
Тем не менее, я нашел различные ссылки, которые указывают, что он используется только для файлов.js и.css и что на самом деле может быть плохо установить заголовок для других типов MIME:
- Примечание: nosniff применяется только к типам "сценарий" и "стиль". Также применение nosniff к изображениям оказалось несовместимым с существующими веб-сайтами. [1]
- В Firefox возникли проблемы с поддержкой nosniff для изображений (Chrome там не поддерживает). [2]
- Примечание. Современные браузеры уважают только заголовок для скриптов и таблиц стилей и отправка заголовка для других ресурсов (например, изображений), когда они обслуживаются с неправильным типом носителя, могут создавать проблемы в старых браузерах. [3]
Вышеприведенные ссылки (и другие) указывают на то, что плохо настроить этот заголовок для всех ответов, но, несмотря на следующие релевантные ссылки и поиск в Google, я не мог найти причин для этого аргумента.
Каковы риски/проблемы, связанные с настройкой X-Content-Type-Options: nosniff
и почему его следует избегать для типов MIME, отличных от text/css
и text/javascript
?
Или, если нет никаких рисков/проблем, почему Mozilla (и другие) предлагает, чтобы они были?
Ответы
Ответ 1
Я буду придерживаться js, css, text/html, json и xml.
Google рекомендует использовать неопознанные токены CSRF, предоставляемые защищенными ресурсами для других типов контента. т.е. сгенерировать токен, используя ресурс js, защищенный заголовком nosniff.
Вы могли бы добавить его ко всему, но это было бы утомительно, и, как вы упомянули выше, вы можете столкнуться с проблемами совместимости и пользователей.
https://www.chromium.org/Home/chromium-security/corb-for-developers
Ответ 2
Ответ Шона Торберна был очень полезным и указал мне на хороший материал, поэтому я и получил награду. Тем не менее, теперь я сделал еще несколько копаний, и я думаю, что у меня есть ответ, который мне нужен, который оказывается противоположным ответу, данным Шоном.
Поэтому я отвечу на свои вопросы:
Приведенные выше ссылки (и другие) указывают на то, что неправильно устанавливать этот заголовок для всех ответов, но, несмотря на переход по ссылкам и поиску в Google, я не смог найти причину этого аргумента.
Здесь есть неправильное толкование - это не то, что они указывают.
Ресурсы, которые я нашел во время моего исследования, ссылались на то, что заголовок уважался только для "типов сценариев и стилей", что я интерпретировал как означающие файлы, которые использовались как text/javascript
или text/css
.
Однако на самом деле они ссылались на контекст, в котором загружается файл, а не на тип MIME, которым он обслуживается. Например, теги <script>
или <link rel="stylesheet">
.
Учитывая эту интерпретацию, все становится намного более понятным, и ответ становится ясным:
Вам необходимо обслуживать все файлы с заголовком nosniff
чтобы снизить риск атак с использованием инъекций со стороны пользовательского контента.
Обслуживание только файлов CSS/JS с этим заголовком не имеет смысла, так как эти типы файлов были бы приемлемы в этом контексте и не нуждаются в дополнительном прослушивании.
Однако для других типов файлов, запретив сниффинг, мы гарантируем, что в каждом контексте разрешены только файлы, чей MIME-тип соответствует ожидаемому типу. Это снижает риск того, что вредоносный скрипт будет скрыт в файле изображения (например) таким образом, чтобы обойти проверки загрузки и позволить сторонним скриптам быть размещенными на вашем домене и встроенными в ваш сайт.
Каковы риски/проблемы, связанные с настройкой X-Content-Type-Options: nosniff, и почему этого следует избегать для типов MIME, кроме text/css и text/javascript?
Или, если нет никаких рисков/проблем, почему Mozilla (и другие) предлагают, чтобы они были?
Там нет проблем.
Описанные проблемы - это проблемы, связанные с риском нарушения совместимости с существующими сайтами. Исследования Mozilla показали, что применение параметра nosniff
для nosniff
<img>
может nosniff
к nosniff
большого количества сайтов из-за неправильной конфигурации сервера, и поэтому заголовок игнорируется в контексте изображений.
Другие контексты (например, HTML-страницы, загрузки, шрифты и т.д.) Либо не используют сниффинг, либо не связаны с риском, либо имеют проблемы совместимости, которые препятствуют отключению сниффинга.
Поэтому они вообще не советуют вам избегать использования этого заголовка.
Однако вопросы, о которых они говорят, приводят к важной сноске к этой дискуссии:
Если вы используете заголовок nosniff
, убедитесь, что вы также используете правильный заголовок Content-Type
!
Некоторые ссылки, которые помогли мне понять это немного более полно:
- Стандарт WhatWG Fetch, который определяет этот заголовок.
- Обсуждение и принятие кода, относящиеся к этому заголовку для инструмента проверки сайта webhint.io.