Сергей Яковлев
Мой блокнот, мастерская, место где я делюсь своим опытом и мыслями

Настройка заголовков безопасности с помощью Netlify

Существует некоторый набор стандартных HTTP-заголовков, которые каждому веб-сайту желательно устанавливать, чтобы обеспечить базовый набор безопасности. В этой заметке рассматриваются такие заголовки и то, как и устанавливать на сайтах развернутых в Netlify.

Общие заголовки безопасности

Для начала, давайте рассмотрим базовые HTTP-заголовки — они общие для всех запросов и обеспечивают базовый набор безопасности.

  1. Заголовок Content-Security-Policy — помогает защитить ваш веб-сайт от атак типа межсайтовый скриптинг , предоставляя список одобренного контента. Этот заголовок позволяет запретить использование контента, который не проходит проверку по правилам или который не должен быть использован в качестве контента. Настройка данного заголовка может показаться сложной, поэтому, если хотите углубиться в тему, посетите официальный сайт . Пример использования:
Content-Security-Policy: default-src 'https://example.com'; script-src  'unsafe-inline' 'https://example.com'; style-src 'unsafe-inline' 'https://example.com'; object-src 'none'
  1. Заголовок X-Frame-Options — этот заголовок говорит браузеру, хотите ли вы, чтобы ваш сайт находился в iframe или нет. В большинстве случаев вы этого не хотите, так как это позволяет использовать веб-сайт для кликджекинга . Суть атаки проста — посетителю показывается страница вашего веб-сайта, где он кликает по какой-то кнопке. На самом деле поверх этой страницы находится какая-то другая прозрачная страница, по кнопке на которой посетитель в действительности деле кликает. Пример использования:
X-Frame-Options: DENY
  1. Заголовок X-XSS-Protection – в старых браузерах (в основном в Safary) позволяет защитить ваш сайт от XSS атак . Большинство браузеров понимает этот заголовок и при обнаружении прекращают загружать страницу при обнаружении попыток таких атак. Пример использования:
X-XSS-Protection: 1; mode=block
  1. Заголовок X-Content-Type-Options — позволяет запретить браузеру анализировать и изменять MIME-тип содержимого. Этот тип атак проверяет содержимое потока информации, чтобы попытаться определить формат файлов данных внутри него и добавить свою информацию. Пример использования:
X-Content-Type-Options: nosniff
  1. Заголовок Referrer-Policy — позволяет задать поведение браузера при обращении к странице из другого домена. По сути, этот заголовок контролирует, сколько информации о Referrer включается в запросы. Пример использования:
Referrer-Policy: same-origin
  1. Заголовок Strict-Transport-Security — позволяет защитить ваш сайт от перенаправления на незащищенные протоколы. Он сообщает браузерам всегда подключаться к вашему сайту через HTTPS и никогда не подключаться по HTTP. Пример использования:
Strict-Transport-Security: max-age=31536000; includeSubDomains
  1. Заголовок Permissions-Policy — Сообщает браузерам, какие функции браузера (геолокация, камера, микрофон и т.п.) разрешены или запрещены на вашем веб-сайте. Пример использования:
Permissions-Policy = "geolocation=(), gyroscope=(), magnetometer=()"

Настройка заголовков в Netlify

Существует два способа установки заголовков в Netlify: добавление в файл конфигурации Netlify (netlify.toml) или добавление отдельного файла _headers.

Файл конфигурации Netlify

[[headers]]
  for = "/*"
  [headers.values]
    X-Frame-Options = "DENY"
    X-XSS-Protection = "1; mode=block"
    X-Content-Type-Options = "nosniff"
    Referrer-Policy = "same-origin"
    Permissions-Policy = "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=(), interest-cohort=()"
    Strict-Transport-Security = "max-age=31536000; includeSubDomains; preload"

Отдельный файл _headers

/*
  X-Frame-Options = "DENY"
  X-XSS-Protection = "1; mode=block"
  X-Content-Type-Options = "nosniff"
  Referrer-Policy = "same-origin"
  Permissions-Policy = "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=(), interest-cohort=()"
  Strict-Transport-Security = "max-age=31536000; includeSubDomains; preload"

Выводы

Установка заголовков безопасности должна дать вашему веб-сайту оценку типа A на таких сервисах, как securityheaders.com , а осмысленное использование — заставить любых тестировщиков безопасности считаться с вашим уровнем безопасности.

Настройка политики безопасности контента зависит от конкретного веб-сайта и может отличаться, например, если вы используете Google Analytics или другие сторонние скрипты. Учтите, при внедрении любой политики безопасности контента вы должны тщательно протестировать свой веб-сайт, чтобы убедиться, что все сторонние ресурсы и клиенты все еще работают с ним.

Ссылки