Что такое "X-Content-Type-Options=nosniff"?

Я выполняю некоторые тесты проникновения на моем локальном хосте с OWASP ZAP, и он продолжает сообщать об этом сообщении:

Заголовок X-Content-Type-Options заголовка Anti-MIME-Sniffing не был установлен в "nosniff"

Эта проверка относится только к Internet Explorer 8 и Google Chrome. Убедитесь, что каждая страница устанавливает заголовок Content-Type и X-CONTENT-TYPE-OPTIONS, если заголовок Content-Type неизвестен

Я понятия не имею, что это значит, и я не смог ничего найти в Интернете. Я попытался добавить:

<meta content="text/html; charset=UTF-8; X-Content-Type-Options=nosniff" http-equiv="Content-Type" />

но я все еще получаю предупреждение.

Как правильно установить параметр?

8 ответов

Решение

Это предотвращает браузер от прослушивания MIME-типа. Большинство браузеров теперь соблюдают этот заголовок, включая Chrome/Chromium, Edge, IE >= 8.0, Firefox >= 50 и Opera >= 13. См.

https://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx?Redirected=true

Отправка нового заголовка ответа X-Content-Type-Options со значением nosniff не позволит Internet Explorer MIME-анализировать ответ от объявленного типа содержимого.

РЕДАКТИРОВАТЬ:

Да, это заголовок HTTP, а не опция метатега HTML.

Смотрите также: http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx

Описание

Настройка сервера X-Content-Type-Options HTTP-заголовок ответа nosniff инструктирует браузеры отключить контент или прослушивание MIME, которое используется для переопределения ответа Content-Type Заголовки, чтобы угадать и обработать данные, используя неявный тип содержимого. Хотя это может быть удобно в некоторых сценариях, оно также может привести к некоторым атакам, перечисленным ниже. Настройка вашего сервера для возврата X-Content-Type-Options Заголовок ответа HTTP установлен в nosniff будет инструктировать браузеры, которые поддерживают сниффинг MIME, использовать предоставленный сервером Content-Type и не интерпретировать контент как другой тип контента.

Поддержка браузера

X-Content-Type-Options Заголовок HTTP-ответа поддерживается в Chrome, Firefox и Edge, а также в других браузерах. Новейшая поддержка браузеров доступна в таблице совместимости браузеров Mozilla Developer Network (MDN) для X-Content-Type-Options:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options

Атаки отражены

  1. MIME Confusion Attack позволяет проводить атаки через сайты, созданные пользователями, позволяя пользователям загружать вредоносный код, который затем выполняется браузерами, которые будут интерпретировать файлы с использованием альтернативных типов контента, например неявных application/javascript против явного text/plain, Это может привести к атаке "drive-by download", которая является распространенным вектором атаки для фишинга. Сайты, на которых размещается пользовательский контент, должны использовать этот заголовок для защиты своих пользователей. Это упоминается VeraCode и OWASP, которые говорят следующее:

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

  2. Неавторизованная горячая ссылка также может быть включена Content-Type нюхают. Путем горячей ссылки на сайты с ресурсами для одной цели, например, для просмотра, приложения могут полагаться на анализ типа контента и генерировать большой трафик на сайтах для другой цели, когда это может противоречить их условиям обслуживания, например, GitHub отображает код JavaScript для просмотра, но не для исполнения:

    Некоторые надоедливые пользователи, не являющиеся людьми (а именно компьютеры), стали использовать "горячую ссылку" на ресурсы с помощью функции необработанного представления - используя необработанный URL-адрес в качестве src для <script> или же <img> тег. Проблема в том, что это не статические активы. Необработанное представление файла, как и любое другое представление в приложении Rails, должно быть отображено перед его возвращением пользователю. Это быстро приводит к значительному снижению производительности. В прошлом мы были вынуждены блокировать популярный контент, обслуживаемый таким образом, потому что это создавало чрезмерную нагрузку на наши серверы.

# prevent mime based attacks
Header set X-Content-Type-Options "nosniff"

Этот заголовок предотвращает атаки на основе "пантомимы". Этот заголовок не позволяет Internet Explorer MIME-анализировать ответ от объявленного типа контента, так как заголовок инструктирует браузер не переопределять тип контента ответа. С опцией nosniff, если сервер сообщает, что содержимое является text/html, браузер отобразит его как text/html.

http://stopmalvertising.com/security/securing-your-website-with-.htaccess/.htaccess-http-headers.html

Для серверов Microsoft IIS этот заголовок можно включить через web.config файл:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Content-Type-Options"/>
        <add name="X-Content-Type-Options" value="nosniff"/>
      </customHeaders>
    </httpProtocol>
</system.webServer>

И вы сделали.

HTTP-заголовок ответа X-Content-Type-Options является маркером, используемым сервером для указания того, что типы MIME, объявленные в заголовках Content-Type, не должны изменяться и должны соблюдаться. Это позволяет отказаться от прослушивания типа MIME, или, другими словами, это способ сказать, что веб-мастера знали, что они делают.

Синтаксис:

X-Content-Type-Options: nosniff

Директивы:

nosniff Блокирует запрос, если запрошенный тип равен 1. "style" и тип MIME не "text / css", или 2. "script", а тип MIME не является типом JavaScript MIME.

Примечание: nosniff применяется только к типам "script" и "style". Также применение nosniff к изображениям оказалось несовместимым с существующими веб-сайтами.

Спецификация:

https://fetch.spec.whatwg.org/

Очень простое объяснение, которое я нашел полезным: заголовок ответа nosniff — это способ сделать веб-сайт более безопасным.

От исследователя безопасности Скотта Хелме, здесь:

Это предотвращает попытки Google Chrome и Internet Explorer мим-обнюхать тип содержимого ответа, отличный от того, который объявлен сервером.

Предотвращение прослушивания контента, если не отправляется mimetype

Конфигурация в Ubuntu 20.04 - apache 2.4.41:

Включить модуль заголовков$ sudo a2enmod headers

Редактировать файл /etc/apache2/conf-available/security.conf и добавить:

Header always set X-Content-Type-Options: nosniff

Перезагрузите Apache$ sudo systemctl restart apache2

$ culr -I localhost

HTTP/1.1 200 OK
Date: Fri, 23 Oct 2020 06:12:16 GMT
Server:  
X-Content-Type-Options: nosniff
Last-Modified: Thu, 22 Oct 2020 08:06:06 GMT

Просто немного подробнее о мета-тегах. Я слышал разговор, в котором было сделано заявление, всегда следует вставлять метатег «no-sniff» в html, чтобы предотвратить обнюхивание браузера (как это сделал OP):

      <meta content="text/html; charset=UTF-8; X-Content-Type-Options=nosniff" http-equiv="Content-Type" />

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

      Bad value text/html; charset=UTF-8; X-Content-Type-Options=nosniff for attribute content on element meta: The legacy encoding contained ;, which is not a valid character in an encoding name.

И это никак не исправить. Чтобы правильно отключить no-sniff, нужно зайти в настройки сервера и отключить его там. Потому что опция «не нюхать» — это что-то из заголовка HTTP, а не из файла HTML, который прикрепляется к ответу HTTP.

Чтобы проверить, отключена ли опция no-sniff, можно включить консоль разработчика, вкладку сетей, а затем проверить заголовок ответа HTTP:

Другие вопросы по тегам