Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy и Strict-Transport-Security — шесть служебных строк, которые сервер передаёт браузеру вместе со страницей. Они говорят, какие ресурсы странице разрешено загружать, можно ли показывать её в чужой рамке, как обходиться с типом файла и по какому протоколу обращаться к сайту. Это не «защита сайта» целиком, а несколько отдельных линий обороны — и «Content-Security-Policy отсутствует» в отчёте не значит, что сайт взломали.

Что вообще такое заголовок ответа — в переводе на бизнес

Когда браузер открывает страницу, сервер отвечает не только её текстом. Вместе с ним приходит набор служебных строк — заголовков ответа: тип содержимого, дата, кодировка, правила кэширования. Браузер их читает и подчиняется. Заголовки безопасности — та часть, которая говорит браузеру «этого не делай»: не загружай скрипт с чужого домена, не показывай страницу в чужой рамке.

Заголовок ничего не делает на сервере: это инструкция, которую сервер передаёт, а исполняет её браузер посетителя. Поэтому «поставить заголовок» — не «включить защиту», а «передать браузеру правило». Проект OWASP Secure Headers описывает такие заголовки как способ повысить безопасность приложения.

CSP: какие ресурсы странице разрешено загружать

Content-Security-Policy (политика безопасности содержимого) — заголовок, которым сайт говорит браузеру, какие ресурсы странице разрешено загружать. По описанию MDN он позволяет администратору сайта управлять тем, что браузеру можно подгружать для конкретной страницы, и помогает защищаться от атак типа cross-site scripting, XSS — межсайтового скриптинга, когда на страницу попадает чужой код и выполняется от её имени.

Работает это как список разрешений. Директива default-src — резервная для всех остальных директив загрузки. Директива frame-ancestors задаёт, какие родительские страницы могут встраивать вашу, — это замена X-Frame-Options внутри CSP. Отдельная история — unsafe-inline и nonce: первый разрешает скрипты, вписанные прямо в разметку, второй — одноразовая метка для конкретного скрипта; если есть оба, браузер игнорирует unsafe-inline.

По нашему замеру CSP не было у 871 из 955 сайтов, отдавших главную страницу, — 91,2 %. Самый массовый пробел из всех, что мы видели.

X-Frame-Options: можно ли встроить вашу страницу в чужую

X-Frame-Options (параметры фрейма) отвечает на один вопрос: можно ли показывать вашу страницу внутри чужого frame или iframe. По MDN заголовок указывает, разрешено ли браузеру отображать документ в frame, iframe, embed или object. Нужен он против кликджекинга — перехвата клика, когда чужой сайт кладёт вашу страницу к себе невидимым слоем, и посетитель думает, что нажимает кнопку у вас, а нажимает у него.

Если заголовка нет и нет другого механизма ограничения встраивания — например, директивы frame-ancestors в CSP, — браузер разрешит другим сайтам встроить документ. Это не авария и не взлом: просто по умолчанию встраивание не запрещено.

RFC 7034 вышел в октябре 2013 года со статусом Informational — это описание практики, а не обязательный стандарт. Значений у заголовка три, и они взаимоисключающие. Для владельца сайта важны два:

  • DENY — браузер не должен показывать контент ни в одном фрейме.
  • SAMEORIGIN — браузер не должен показывать контент во фрейме страницы с другим origin, то есть с другого источника.

По нашему замеру X-Frame-Options отсутствовал у 12 из 955 сайтов — 1,3 %. Считали строго: отсутствующим признавался только случай, когда не было и frame-ancestors в CSP.

X-Content-Type-Options: не угадывать тип файла

X-Content-Type-Options (параметры типа содержимого) — короткий заголовок с одним рабочим значением nosniff. Он сообщает, что типы, объявленные в Content-Type, нужно соблюдать и не менять: sniff — определять тип по содержимому, nosniff это выключает. MDN приводит пример: при Content-Type: text/plain и X-Content-Type-Options: nosniff браузер не будет трактовать ответ как HTML, даже если внутри есть разметка.

MDN добавляет: специалисты по тестированию безопасности обычно ожидают, что этот заголовок установлен. У 27 из 955 сайтов — 2,8 % — заголовка не было или он не был равен nosniff: в цифру попали и те, где строки нет, и те, где значение другое.

Referrer-Policy и Permissions-Policy: два заголовка, о которых забывают

Эти два заголовка в отчётах встречаются реже остальных — и именно поэтому их легко пропустить. Referrer-Policy (политика реферера) управляет тем, сколько информации о переходе уходит вместе с запросами. Реферер — адрес страницы, с которой посетитель пришёл. По MDN значение по умолчанию — strict-origin-when-cross-origin: если заголовка нет, умолчание у браузера всё равно есть, просто сайт его не выбирал.

Permissions-Policy (политика разрешений) — механизм разрешать и запрещать использование возможностей браузера в документе или внутри любого iframe на странице. Речь о том, что сайт запрашивает у посетителя: камера, микрофон, геолокация.

Наши цифры: Referrer-Policy не было у 24 из 955 — 2,5 %, Permissions-Policy — у 4 из 955, 0,4 %. Второй показатель мал, но вывод «его ставят все» неверен: у остальных строка присутствует — а не обязательно что-то запрещает.

HSTS: только HTTPS, и точка

Strict-Transport-Security (строгая транспортная безопасность, HSTS) сообщает браузеру, что к хосту нужно обращаться только по HTTPS, а будущие попытки по HTTP автоматически переводятся на HTTPS. Главный параметр — max-age: время в секундах, которое браузер помнит, что к хосту можно обращаться только по HTTPS. Пока срок не истёк, браузер сам переводит адрес на HTTPS, даже если посетитель набрал http://.

С preload связана отдельная история, вокруг которой больше всего путаницы: для него max-age должен быть не меньше 31536000 (год в секундах) и обязательна директива includeSubDomains. Оба требования относятся именно к preload — универсального правила «минимум год для всех» в наших источниках нет.

Подробнее HSTS разобран в статье про предупреждение браузера о небезопасном соединении. В таблице ниже HSTS нет: отдельной метрикой в этом замере мы его не считали.

Почему CSP нет у 91 %, а X-Frame-Options есть почти у всех

Замер — 1 000 интернет-магазинов малого и среднего бизнеса, 15 октября 2026 года, только по открытым ответам серверов. Главную страницу отдали 955 сайтов — это знаменатель во всех строках. По состоянию на ноябрь 2026 года картина такая.

ЗаголовокЧто делаетНет у магазинов (из 955)
Content-Security-Policyзадаёт, какие ресурсы странице разрешено загружать871 — 91,2 %
X-Frame-Optionsрешает, можно ли встроить страницу в чужую12 — 1,3 %
X-Content-Type-Optionsзапрещает браузеру угадывать тип файла27 — 2,8 %
Referrer-Policyуправляет тем, сколько данных о переходе уходит с запросами24 — 2,5 %
Permissions-Policyразрешает и запрещает возможности браузера4 — 0,4 %
Сколько сайтов из 955 не имеют каждого заголовка безопасности: Content-Security-Policy 871, X-Content-Type-Options 27, Referrer-Policy 24, X-Frame-Options 12
Замер 15.10.2026: 955 сайтов отдали главную страницу. Хотя бы одна находка по заголовкам — у 952 из 955. Permissions-Policy не было у 4 сайтов.

Оговорка к таблице. По X-Content-Type-Options в счёт попали и сайты, где заголовка нет, и те, где он есть, но не равен nosniff. По X-Frame-Options — только те, где нет ни заголовка, ни frame-ancestors в CSP. Определения разные, складывать строки нельзя.

Разрыв между первой строкой и остальными — главное, что стоит увидеть. Хотя бы одна находка по заголовкам есть у 952 из 955 сайтов (99,7 %): почти у каждого магазина чего-то не хватает, но у большинства не хватает именно CSP. Срез по движкам подтверждает: на популярном конструкторе CSP не было у 110 из 110 сайтов, на готовом движке для интернет-торговли — у 91 из 95, на тяжёлой коробочной CMS — у 291 из 343.

Почему так? Вероятная причина — разная цена настройки. X-Frame-Options часто приходит вместе с движком или шаблоном: он простой и не зависит от того, какие скрипты вы подключили. CSP требует индивидуальной работы под конкретный сайт. Объяснение правдоподобное, но в наших источниках его нет — считайте его гипотезой.

Что это значит для вас и что делать

Порядок простой, и технических знаний он не требует — только понимания, кому ставить задачу.

  1. Посмотрите, что отдаёт ваш сайт. Не инструкцию к движку, а реальный ответ на главную страницу.
  2. Начните с CSP. Это самый массовый пробел.
  3. Потом cookie-флаги. Отдельная проверка того же замера: у 661 из 955 сайтов (69,2 %) хотя бы одна cookie отдавалась без флага Secure.
  4. Дальше — остальное. X-Content-Type-Options, Referrer-Policy, Permissions-Policy, HSTS. По отдельности мелочь, вместе — общая гигиена.
  5. Поставьте задачу тому, кто отвечает за сервер или шаблон. Администратор, подрядчик или поддержка хостинга.

Готовых конфигов мы не даём сознательно: синтаксис зависит от сервера, панели и шаблона, а непроверенный блок может уронить сайт.

Проверить, что приходит в ответе вашего сайта, можно на странице бесплатного осмотра: проверка заголовков ответа входит в бесплатный осмотр стражсайта.рф. Осмотр пассивный — команда стражсайта.рф читает ответ сайта, ничего не ломает, не подбирает пароли и не пытается ничего эксплуатировать.

Чего наша проверка не доказывает

Отчёт — это снимок, а не приговор. Вот чего наша проверка не делает.

  • Не подтверждает уязвимость. Отсутствие заголовка — не «дыра» и не признак того, что сайт взломали.
  • Не измеряет, сколько атак предотвращено. Ни MDN, ни RFC 7034 таких цифр не дают — и мы не даём.
  • Не гарантирует, что заголовки идут от вашего сервера. Если главная отдаётся через CDN или WAF, строки в ответе могут быть не от origin — тогда проверка помечается как degraded, а не «нет заголовков».
  • Не описывает рынок за пределами выборки. 91,2 % — это 871 из 955 доменов нашей выборки магазинов, а не «весь рунет».
  • Смотрит только главную страницу. Остальные страницы сайта в этот замер не входили.

Как устроены проверки и в каком порядке они идут, описано в разделе методика.

Короткие ответы на частые вопросы

Отсутствие заголовков — это взлом?

Нет. Заголовок — одна из линий защиты, а не признак компрометации. Наш замер показывает, что CSP нет у 871 из 955 магазинов, — это распространённая гигиеническая проблема, а не свидетельство того, что сайт уже взломали.

Какой заголовок важнее остальных?

Однозначного приоритета источники не дают. По нашей выборке самый массовый пробел — CSP, а X-Frame-Options отсутствует у единиц. Начинать логично с того, чего нет у вас.

Если поставить CSP, сайт станет неуязвимым?

Нет. CSP ограничивает источники загрузки и, по описанию MDN, помогает защищаться от атак типа cross-site scripting. Но он не заменяет остальные меры, и ни MDN, ни RFC 7034 не утверждают, что одного заголовка достаточно.

Можно ли поставить заголовки в панели хостинга?

В наших источниках этого нет: MDN и RFC описывают сам заголовок, а не способы его настройки у конкретных провайдеров. Этот вопрос решает тот, кто отвечает за сервер или шаблон сайта.

Заголовки безопасности — это несколько конкретных правил, которые сервер передаёт браузеру, а не общая «защита сайта». Их отсутствие не означает взлома, но означает, что одна из линий защиты не работает. Самая массовая нехватка — CSP: его нет у 871 из 955 магазинов. Начните с неё — и с того, чтобы узнать, что отдаёт именно ваш сайт.