Когда следует использовать HTTP-заголовок "X-Content-Type-Options: nosniff" - PullRequest
0 голосов
/ 27 сентября 2018

Я провел несколько тестов на проникновение, используя OWASP ZAP , и он вызывает следующее предупреждение для всех запросов: X-Content-Type-Options Header Missing.

Я понимаю заголовоки почему это рекомендуется.Это очень хорошо объяснено в этом вопросе StackOverflow .

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

  • Примечание: nosniff применяется только к типам "script" и "style".Кроме того, применение nosniff к изображениям оказалось несовместимым с существующими веб-сайтами. [1]
  • В Firefox возникли проблемы с поддержкой nosniff для изображений (Chrome не поддерживаетэто там). [2]
  • Примечание: современные браузеры уважают заголовок только для скриптов и таблиц стилей и отправляют заголовок для других ресурсов (например, изображений), когдаони обслуживаются с неправильным типом мультимедиа, что может создать проблемы в старых браузерах. [3]

Приведенные выше ссылки (и другие) указывают, что плохо простоустановить этот заголовок для всех ответов, но, несмотря на то, что он перешел по любым релевантным ссылкам и поиску в Google, я не смог найти причину этого аргумента.

Каковы риски / проблемы, связанные с настройкой X-Content-Type-Options: nosniff ипочему его следует избегать для типов MIME, отличных от text/css и text/javascript?

Или, если нет никаких рисков / проблем, почему Mozilla (и другие) предполагают, что они существуют?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

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

Поэтому я отвечу на свои вопросы:

Приведенные выше ссылки (и другие) указывают на то, что неправильно устанавливать этот заголовок для всех ответов, но, несмотря на переход по ссылкам и поиску в 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 к тегам <img> может привести к поломке многих сайтов из-за неправильной конфигурации сервера, и поэтому заголовок игнорируется в контекстах изображений.

Другие контексты (например, HTML-страницы, загрузки,шрифты и т. д.) либо не используют сниффинг, либо не связаны с риском, либо имеют проблемы с совместимостью, которые препятствуют отключению сниффинга.

Поэтому они не предлагают избегать использования этого заголовка,на всех.

Однако проблемы, о которых они говорят, приводят к важной сноске к этому обсуждению:

Если вы используете заголовок nosniff, убедитесь, что вытакже содержит правильный заголовок Content-Type!


Некоторые ссылки, которые помогли мне понять это немного более полно:

  1. WhatWG Fetchстандарт, определяющий этот заголовок.
  2. Обсуждение и код фиксации , относящиеся к этому заголовку для webhint.io инструмент проверки сайта.
0 голосов
/ 15 ноября 2018

Я бы придерживался js, css, text / html, json и xml.

Google рекомендует использовать нереализуемые токены CSRF, предоставляемые защищенными ресурсами для других типов контента.т.е. сгенерировать токен, используя ресурс js, защищенный заголовком nosniff.

Вы можете добавить его ко всему, но это будет просто утомительно, и, как вы упомянули выше, вы можете столкнуться с проблемами совместимости и пользователя.

https://www.chromium.org/Home/chromium-security/corb-for-developers

...