Что такое "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. См.
Отправка нового заголовка ответа 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
Атаки отражены
MIME Confusion Attack позволяет проводить атаки через сайты, созданные пользователями, позволяя пользователям загружать вредоносный код, который затем выполняется браузерами, которые будут интерпретировать файлы с использованием альтернативных типов контента, например неявных
application/javascript
против явногоtext/plain
, Это может привести к атаке "drive-by download", которая является распространенным вектором атаки для фишинга. Сайты, на которых размещается пользовательский контент, должны использовать этот заголовок для защиты своих пользователей. Это упоминается VeraCode и OWASP, которые говорят следующее:Это уменьшает подверженность атакам при загрузке с диска и сайтам, обслуживающим загруженный пользователем контент, который с помощью умного именования может рассматриваться MSIE как исполняемые или динамические файлы HTML.
Неавторизованная горячая ссылка также может быть включена
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.
Для серверов 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 к изображениям оказалось несовместимым с существующими веб-сайтами.
Спецификация:
Очень простое объяснение, которое я нашел полезным: заголовок ответа 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: