PassFront
  1. PassFront
  2. База знаний
  3. HTTP и HTTPS

Какие заголовки безопасности стоит выставлять в HTTP-ответах?

HTTP и HTTPS

Заголовки безопасности включают встроенные защиты браузера: только HTTPS, запрет чужих скриптов, запрет встраивания в iframe. Уязвимости они не исправляют, но резко сужают поле атаки.

Базовый набор

  • Strict-Transport-Security: max-age=31536000; includeSubDomains — только HTTPS, защита от SSL stripping. Первый визит не защищён — для него есть preload-список и директива preload.
  • Content-Security-Policy — откуда грузить скрипты, стили, картинки; главный барьер против XSS, блокирует inline-скрипты без nonce или хеша.
  • X-Content-Type-Options: nosniff — запрет угадывать MIME: загруженный «текст» не исполнится как скрипт.
  • frame-ancestors 'none' в CSP или старый X-Frame-Options: DENY — защита от clickjacking.
  • Referrer-Policy: strict-origin-when-cross-origin — пути и query не утекают в Referer.
  • Permissions-Policy — отключает камеру, геолокацию и прочие API.

Внедрение CSP

  1. Начать с Content-Security-Policy-Report-Only и собрать нарушения.
  2. Перейти на случайный nonce на каждый ответ: script-src 'nonce-…' 'strict-dynamic'.
  3. Избегать 'unsafe-inline' и 'unsafe-eval' — они обнуляют смысл политики.

Типичные ошибки

  • HSTS с includeSubDomains, пока какой-то поддомен ещё на HTTP, — он станет недоступен на весь max-age.
  • Надежда на X-XSS-Protection: современные браузеры его игнорируют.

Коротко для собеседования

Эти заголовки — дешёвый слой защиты в глубину: HSTS, CSP, nosniff и запрет фреймов закрывают целые классы атак. CSP внедряют через Report-Only, статичные заголовки удобно ставить на прокси, а главная ошибка — unsafe-inline, обнуляющий CSP.

Другие вопросы раздела