Главная Статьи Оптимизация

Заголовки безопасности сайта: HSTS, CSP и другие

Заголовки безопасности — это служебные HTTP-заголовки, которые сервер отдаёт вместе со страницей и которые защищают посетителей от части атак. Их наличие — признак ухоженного сайта и сигнал доверия для поисковиков. Разберём главные заголовки по делу: что каждый даёт и как его добавить.

Что это и зачем

Когда браузер открывает страницу, сервер вместе с HTML присылает набор HTTP-заголовков. Часть из них управляет безопасностью: запрещают встраивать сайт в чужой фрейм, заставляют использовать HTTPS, ограничивают, какие скрипты можно выполнять. Они не заменяют защиту на стороне сервера, но закрывают целый класс клиентских атак (XSS, кликджекинг, перехват соединения) и поднимают общий уровень доверия к сайту.

Что от чего защищает HSTS перехвата соединения Content-Security-Policy XSS — внедрения скриптов X-Frame-Options кликджекинга X-Content-Type-Options подмены типа файла
Каждый заголовок закрывает свой класс клиентских атак.

Главные заголовки

Strict-Transport-Security (HSTS)
Заставляет браузер всегда открывать сайт по HTTPS, даже если ввели http. Защита от подмены соединения. Требует рабочего SSL.
Content-Security-Policy (CSP)
Ограничивает, откуда можно грузить скрипты, стили и ресурсы. Главная защита от XSS. Самый мощный, но требует аккуратной настройки.
X-Frame-Options
Запрещает встраивать ваш сайт в iframe на чужих ресурсах — защита от кликджекинга (обмана кликами).
X-Content-Type-Options
Значение nosniff запрещает браузеру «угадывать» тип файла — защита от подмены контента.
Referrer-Policy
Управляет тем, какой адрес страницы передаётся при переходах по ссылкам — приватность пользователей.
Permissions-Policy
Ограничивает доступ страницы к камере, микрофону, геолокации и другим возможностям браузера.

Как добавить

Заголовки настраиваются на сервере. Для Apache — в .htaccess:

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" Header set X-Frame-Options "SAMEORIGIN" Header set X-Content-Type-Options "nosniff" Header set Referrer-Policy "strict-origin-when-cross-origin"

Для nginx (внутри блока server) — директива add_header:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always;
🛠
Проверить, какие заголовки уже отдаёт ваш сайт, и что добавить, поможет проверка заголовков безопасности. Сгенерировать строки для сервера — генератор .htaccess и конвертер в nginx.

С чего начать

Не обязательно внедрять всё сразу. Безопасный порядок: сначала HSTS (если сайт уже на HTTPS), X-Frame-Options и X-Content-Type-Options — они почти не ломают сайт. Content-Security-Policy добавляйте последним и осторожно: слишком строгая политика может заблокировать ваши же скрипты и аналитику. Сначала протестируйте CSP в режиме Report-Only.

🔒
HSTS не имеет смысла без рабочего HTTPS — проверьте сертификат в проверке SSL, а зачем сайту HTTPS — в статье SSL и HTTPS. Полный технический разбор сайта — анализ сайта.

Content-Security-Policy подробнее

CSP — самый мощный из заголовков и самый капризный, поэтому о нём отдельно. Он работает как белый список: вы перечисляете, откуда странице разрешено грузить ресурсы, а всё остальное браузер блокирует. Например, директива script-src 'self' разрешает скрипты только с вашего домена, и встроенный злоумышленником чужой скрипт просто не выполнится — это и есть защита от XSS. Сложность в том, что на реальном сайте ресурсы тянутся из многих мест: аналитика, шрифты, виджеты, реклама. Забудете указать домен — отвалится ваш же функционал. Поэтому CSP сначала включают в режиме Content-Security-Policy-Report-Only: он ничего не блокирует, а только сообщает, что заблокировал бы. Вы собираете отчёты, дополняете политику нужными источниками и только потом переводите её в боевой режим.

Как проверить заголовки сайта

Узнать, какие заголовки сайт уже отдаёт, можно несколькими способами. Проще всего — специальным онлайн-сервисом проверки: вводите адрес и получаете список заголовков с оценкой и подсказками, чего не хватает. В браузере то же видно в инструментах разработчика на вкладке Network: откройте любой запрос и посмотрите Response Headers. После настройки обязательно перепроверьте — частая ситуация, когда заголовок прописали, а он не применился из-за ошибки в конфиге или кэша.

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

Несколько граблей, на которые наступают регулярно. HSTS включают на сайте, который ещё не полностью на HTTPS, — и часть страниц перестаёт открываться, потому что браузер запоминает «только https». Добавляют в HSTS флаг preload, не будучи к нему готовыми, а это уже почти необратимо. Делают CSP слишком строгим и блокируют собственную аналитику и виджеты. В nginx дублируют add_header в разных блоках — и тогда заголовки из родительского блока перестают наследоваться, ведь nginx берёт только ближайший набор. Поэтому правило: внедрять по одному, проверять после каждого, а CSP — только через Report-Only.

Влияют ли на SEO

Напрямую заголовки безопасности — не фактор ранжирования, но они работают на него косвенно: повышают доверие и безопасность (часть E-E-A-T), а HSTS закрепляет HTTPS, который фактором уже является. Современные SEO-аудиты (в том числе наш анализатор) проверяют эти заголовки, и их наличие отличает профессионально сделанный сайт.

Коротко

Заголовки безопасности защищают посетителей от XSS, кликджекинга и перехвата соединения. Главные: HSTS (всегда HTTPS), CSP (ограничение скриптов), X-Frame-Options (запрет фреймов), X-Content-Type-Options (nosniff), Referrer-Policy и Permissions-Policy. Настраиваются в .htaccess или nginx. Начните с простых (HSTS, X-Frame-Options, nosniff), CSP добавляйте осторожно. На SEO влияют косвенно — через доверие и HTTPS.

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

Что такое заголовки безопасности сайта?
Это служебные HTTP-заголовки, которые сервер присылает вместе со страницей и которые указывают браузеру, как защищать пользователя: всегда использовать HTTPS, не встраивать сайт в чужой фрейм, ограничивать выполнение скриптов и т. д. Защищают от XSS, кликджекинга и перехвата соединения.
Какие заголовки безопасности самые важные?
HSTS (Strict-Transport-Security) — всегда HTTPS; Content-Security-Policy — ограничение скриптов (защита от XSS); X-Frame-Options — запрет встраивания в iframe; X-Content-Type-Options: nosniff. Дополнительно — Referrer-Policy и Permissions-Policy.
Как добавить заголовки безопасности?
Они настраиваются на сервере: в Apache — директивой Header set в .htaccess, в nginx — add_header внутри блока server. Сгенерировать нужные строки помогают генератор .htaccess и конвертер в nginx.
С какого заголовка начать?
С простых, которые почти не ломают сайт: HSTS (если уже на HTTPS), X-Frame-Options и X-Content-Type-Options. Content-Security-Policy внедряйте последним и осторожно — сначала в режиме Report-Only, чтобы не заблокировать собственные скрипты и аналитику.
Влияют ли заголовки безопасности на позиции?
Напрямую — нет, это не фактор ранжирования. Но косвенно они помогают: повышают доверие и безопасность (часть E-E-A-T), а HSTS закрепляет HTTPS, который уже является фактором. SEO-аудиты проверяют эти заголовки.
Почему Content-Security-Policy надо внедрять осторожно?
CSP работает как белый список источников и блокирует всё, что в нём не указано. На реальном сайте ресурсы тянутся из многих мест (аналитика, шрифты, виджеты), и слишком строгая политика отключит ваш же функционал. Поэтому CSP сначала включают в режиме Report-Only — он только сообщает, что заблокировал бы, — а в боевой режим переводят после сбора отчётов.