Настройка заголовков безопасности с помощью Netlify
Существует некоторый набор стандартных HTTP-заголовков, которые каждому веб-сайту желательно устанавливать, чтобы обеспечить базовый набор безопасности. В этой заметке рассматриваются такие заголовки и то, как и устанавливать на сайтах развернутых в Netlify.
Общие заголовки безопасности
Для начала, давайте рассмотрим базовые HTTP-заголовки — они общие для всех запросов и обеспечивают базовый набор безопасности.
- Заголовок
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'
- Заголовок
X-Frame-Options
— этот заголовок говорит браузеру, хотите ли вы, чтобы ваш сайт находился вiframe
или нет. В большинстве случаев вы этого не хотите, так как это позволяет использовать веб-сайт для кликджекинга. Суть атаки проста — посетителю показывается страница вашего веб-сайта, где он кликает по какой-то кнопке. На самом деле поверх этой страницы находится какая-то другая прозрачная страница, по кнопке на которой посетитель в действительности деле кликает. Пример использования:
X-Frame-Options: DENY
- Заголовок
X-XSS-Protection
– в старых браузерах (в основном в Safari) позволяет защитить ваш сайт от XSS атак. Большинство браузеров понимает этот заголовок и при обнаружении прекращают загружать страницу при обнаружении попыток таких атак. Пример использования:
X-XSS-Protection: 1; mode=block
- Заголовок
X-Content-Type-Options
— позволяет запретить браузеру анализировать и изменять MIME-тип содержимого. Этот тип атак проверяет содержимое потока информации, чтобы попытаться определить формат файлов данных внутри него и добавить свою информацию. Пример использования:
X-Content-Type-Options: nosniff
- Заголовок
Referrer-Policy
— позволяет задать поведение браузера при обращении к странице из другого домена. По сути, этот заголовок контролирует, сколько информации о Referrer включается в запросы. Пример использования:
Referrer-Policy: same-origin
- Заголовок
Strict-Transport-Security
— позволяет защитить ваш сайт от перенаправления на незащищенные протоколы. Он сообщает браузерам всегда подключаться к вашему сайту через HTTPS и никогда не подключаться по HTTP. Пример использования:
Strict-Transport-Security: max-age=31536000; includeSubDomains
- Заголовок
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 или другие сторонние скрипты. Учтите, при внедрении любой политики безопасности контента вы должны тщательно протестировать свой веб-сайт, чтобы убедиться, что все сторонние ресурсы и клиенты все еще работают с ним.