Хостинг и инфраструктура

HTTP заголовки безопасности: CSP, HSTS и остальные

Что реально делают CSP, HSTS и другие HTTP заголовки безопасности, как их настроить и какую атаку блокирует каждый из них, без лишнего жаргона.

Команда rabbitclipПубликация: 4 мин чтения

Коротко

HTTP заголовки безопасности — это правила, которые веб-сервер добавляет к каждому ответу, сообщая браузеру, как себя вести. CSP ограничивает, из каких источников можно загружать скрипты и изображения, HSTS заставляет браузер всегда использовать зашифрованное соединение, а заголовки помельче, вроде X-Content-Type-Options и Referrer-Policy, закрывают риски, которые ничуть не менее реальны. Ни один не требует написания кода; хватает нескольких строк в конфигурации сервера или CDN.

Если сайт юридической фирмы запускает рекламный скрипт стороннего сервиса без правильно настроенного CSP, этот скрипт может внедрить в страницу почти любой код; на странице, где посетитель заполняет форму, этот риск отнюдь не абстрактный. Заголовки безопасности с самого начала ограничивают, что такой скрипт вообще способен сделать, и именно поэтому их стоит проверять не только на новом сайте, но и на уже работающем годами.

Что такое HTTP заголовок безопасности и как он работает?

HTTP заголовок безопасности — это дополнительная строка инструкции, которую сервер отправляет с каждым ответом; браузер читает её и соответственно ограничивает страницу. Заголовки не меняют содержимое страницы, только то, что браузеру разрешено с ним делать.

Их добавление не требует написания новой функции; достаточно нескольких строк в конфигурации Nginx, Apache, Cloudflare или такого фреймворка, как Next.js. После правильной настройки они автоматически уходят с каждым запросом страницы.

Что на самом деле делает Content-Security-Policy (CSP)?

CSP определяет, с каких адресов странице разрешено загружать скрипты, изображения, шрифты и стили. Согласно рекомендациям OWASP по HTTP заголовкам, CSP — единственный заголовок, который реально мешает выполнению кода, уже внедрённого в страницу; это делает его одной из самых эффективных защит от межсайтового скриптинга (XSS).

Сложная часть настройки, действительно перечислить каждый сторонний ресурс, который использует сайт, аналитику, сервис шрифтов, платёжного провайдера; пропуск одного из них ломает часть страницы. Поэтому CSP обычно сначала запускают в режиме только отчётов, изучают журналы, а затем переключают в ограничивающий режим, оставляя достаточно времени, чтобы заметить забытый домен раньше посетителей.

Что гарантирует HSTS (Strict-Transport-Security)?

HSTS говорит браузеру никогда больше не подключаться к сайту по незашифрованному http, инструкция сохраняется на стороне браузера, поэтому даже если посетитель наберёт http в адресной строке, соединение автоматически переключается на https. Это закрывает возможность понижения соединения до незашифрованного посередине пути, атаку посредника.

Рекомендуемая MDN настройка держит долгий max-age, около двух лет, охватывает и поддомены, и может быть отправлена в список предзагрузки; но перед включением в этот список каждый поддомен действительно должен работать по https, поскольку выйти из этого списка потом непросто, а браузеры с уже сохранённым правилом продолжат требовать шифрование ещё долго после отката.

Как настроить базовый набор заголовков

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

  • Content-Security-Policy: ограничивает, откуда можно загружать скрипты и ресурсы
  • Strict-Transport-Security: держит соединение зашифрованным постоянно
  • X-Content-Type-Options: nosniff, не даёт браузеру неправильно угадать тип файла
  • Referrer-Policy: ограничивает, какая информация страницы утекает на другие сайты
  • Permissions-Policy: ограничивает доступ к функциям браузера вроде камеры и геолокации

Как тестировать заголовки и держать их без ошибок

Неправильно настроенный заголовок может либо заметно сломать страницу, либо тихо отключить какую-то функцию; оба случая нужно тестировать до запуска. Консоль разработчика браузера напрямую показывает нарушения CSP; когда ресурс блокируется, консоль называет его и объясняет причину.

Изменения стоит сначала опробовать в тестовой среде, затем на боевой странице с низким риском; выкатывать их сразу на весь сайт значит рисковать сломать неожиданную стороннюю интеграцию.

Частые ошибки

Заголовки безопасности могут превратиться в настройку, которую один раз сделали и забыли; это приводит к поломке, которую никто не замечает, пока не добавят новую интеграцию.

  • ослаблять CSP с помощью unsafe-inline, что во многом сводит на нет смысл заголовка
  • добавлять HSTS в список предзагрузки без предварительного тестирования
  • не обновлять список CSP при добавлении нового стороннего скрипта
  • настраивать заголовки только на главной странице и забывать про остальной сайт

HTTP заголовки безопасности не меняют внешний вид сайта; они определяют, что браузеру разрешено с ним делать. Их настройка разовая задача, а вот поддержка нет. Первый разговор с rabbitclip хорошее место, чтобы проверить, какие заголовки реально есть у вашего сайта сегодня.

Частые вопросы

Влияют ли заголовки безопасности на SEO?

Не напрямую, но заголовки вроде HSTS, которые принуждают к HTTPS, служат косвенным положительным сигналом для поисковых систем, ценящих безопасные соединения.

Может ли настройка CSP сломать работающий сайт?

Да, при неправильной настройке. Сначала протестировать в режиме только отчётов и изучить журналы перед переключением в ограничивающий режим снижает этот риск.

Где настраиваются эти заголовки?

В конфигурации Nginx, Apache, Cloudflare или фреймворка вроде Next.js; синтаксис отличается, логика остаётся той же.

Действительно ли небольшому сайту нужны эти заголовки?

Да. Размер здесь не важен; любой сайт с формой, страницей входа или сторонними скриптами сталкивается с теми же базовыми рисками.

Поделиться

Связанная услугаОблако и инфраструктураМы видели инфраструктуру, которая не выдерживает роста системы и падает в пиковые моменты, — поэтому строим её сразу надёжной. Закладываем безопасность и непрерывность с самого начала и берём техническую нагрузку на себя.

Похожие статьи

Если не знаете, с чего начать, — вы там, где нужно.

Проект в вашей голове может быть уже чётким или пока в виде идеи. Подходит и то, и другое. Коротким разговором обсудим вместе, где вы сейчас и куда можете прийти.

Запланируем встречу
Обсудить проект