Перейти к содержимому
Левицкий Концепт
Инициализация систем000%

Генератор заголовка Content-Security-Policy

Отметьте, какие сервисы подключены к сайту, — генератор соберёт CSP, покажет строки для nginx, Apache и meta и предупредит о небезопасных значениях.

Бесплатно, без регистрации. Данные обрабатываются в вашем браузере и никуда не отправляются.

Что подключено к сайту

Режим и параметры

Готовая строка
add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' https://mc.yandex.ru https://yastatic.net; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://mc.yandex.ru; font-src 'self'; connect-src 'self' https://mc.yandex.ru wss://mc.yandex.ru; frame-src https://mc.yandex.ru; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'; upgrade-insecure-requests" always;

Тонкая настройка директив

Добавьте свои источники через пробел: домены (https://cdn.example.ru), ключевые слова ('self', 'none'), nonce или hash.

Как пользоваться

  1. Отметьте сервисы, подключённые к сайту: аналитику, шрифты, видео, капчу, CDN.
  2. Начните с режима Report-Only — он ничего не ломает, а только сообщает о нарушениях.
  3. Скопируйте строку для своего сервера: nginx, Apache, Next.js или meta-тег.
  4. Через неделю без нарушений в консоли и отчётах отключите Report-Only.

Что такое Content-Security-Policy

Content-Security-Policy (CSP) — HTTP-заголовок, который сообщает браузеру, откуда сайту разрешено загружать скрипты, стили, картинки, шрифты и фреймы и куда отправлять данные. Если злоумышленнику удастся внедрить на страницу вредоносный скрипт — через уязвимый плагин, поле комментария или взломанный сторонний сервис, — браузер откажется его выполнять, потому что источник не входит в список разрешённых. CSP не заменяет исправление уязвимостей, но превращает многие из них из катастрофы в неприятность.

Основные директивы

ДирективаЧто ограничиваетТипичное значение
default-srcВсё, что не задано отдельно'self'
script-srcJavaScript'self' + домены аналитики и CDN
style-srcCSS'self' 'unsafe-inline' (часто нужно CMS)
img-srcКартинки'self' data: + домены счётчиков
connect-srcfetch, XHR, WebSocket'self' + API и аналитика
frame-srcВстраиваемые фреймыВидеохостинги, карты, капча
object-srcПлагины'none'
frame-ancestorsКто может встроить ваш сайт'self' или 'none'
form-actionКуда отправляются формы'self' + платёжные шлюзы

Пресеты популярных сервисов

Самое трудоёмкое в CSP — собрать все домены, которые использует сайт. Яндекс Метрике нужны mc.yandex.ru для скриптов, картинок-пикселей и соединений, yastatic.net — для части скриптов, а Вебвизору — фреймы. Google Analytics 4 использует googletagmanager.com и поддомены google-analytics.com. Google Fonts — две разные зоны для стилей и для самих файлов шрифтов. Пресеты генератора содержат такие наборы; но сервисы иногда меняют домены, поэтому проверяйте работу сайта в режиме Report-Only.

Как внедрять, ничего не сломав

  1. Report-Only. Заголовок Content-Security-Policy-Report-Only ничего не блокирует, только пишет нарушения в консоль и, если указан report-uri, отправляет отчёты. Поставьте его на рабочий сайт.
  2. Соберите нарушения. Пройдите ключевые сценарии: оформление заказа, оплату, формы, личный кабинет. Добавьте недостающие источники в поля тонкой настройки.
  3. Подождите. Неделя трафика покажет редкие сценарии: виджеты, которые грузятся по условию, A/B-тесты, рекламные пиксели.
  4. Включите блокировку. Снимите Report-Only. Следите за ошибками в первые дни после включения.
  5. Поддерживайте. Подключаете новый сервис — сначала добавьте его в CSP.

unsafe-inline и unsafe-eval: когда без них нельзя

Самая сильная защита CSP — запрет встроенных скриптов (inline). Но многие сайты используют встроенные скрипты: код счётчиков, данные для фреймворков, обработчики в атрибутах. Если разрешить 'unsafe-inline' в script-src, защита от XSS становится существенно слабее. Правильная альтернатива — nonce (случайная метка, которую сервер генерирует для каждого ответа и ставит на разрешённые скрипты) или hash конкретного скрипта. Современные фреймворки, включая Next.js, умеют работать с nonce. Для стилей 'unsafe-inline' — меньшее зло и часто приемлемый компромисс.

Где прописать заголовок

  • nginx — директива add_header в блоке server или location; ключ always нужен, чтобы заголовок отдавался и на страницах ошибок.
  • Apache — Header always set в конфигурации или .htaccess (нужен модуль mod_headers).
  • Next.js — функция headers() в next.config или middleware, если нужен nonce.
  • Meta-тег — запасной вариант, если доступа к серверу нет. Ограничения: не поддерживает frame-ancestors, report-uri и режим Report-Only.

CSP — один из заголовков безопасности. Вместе с ним стоит настроить HSTS, X-Content-Type-Options, Referrer-Policy и Permissions-Policy; перечень проверок есть в чек-листе OWASP. Если сайт уже взломали, начните с пошагового плана. Для защиты почтового домена от подделки используйте генератор SPF, DKIM и DMARC.

Пример политики для типичного сайта

Сайт на CMS с Яндекс Метрикой, шрифтами Google Fonts и видео с YouTube в статьях. Базовые директивы — 'self' для всего. В script-src добавляются mc.yandex.ru и yastatic.net, в connect-src — mc.yandex.ru и wss://mc.yandex.ru для Вебвизора, в img-src — mc.yandex.ru и data: для мелких иконок. Для шрифтов — fonts.googleapis.com в style-src и fonts.gstatic.com в font-src. Для видео — youtube.com и youtube-nocookie.com в frame-src. Плюс object-src 'none', base-uri 'self' и frame-ancestors 'self'. Стили CMS обычно требуют 'unsafe-inline' в style-src. Такая политика ставится сначала в режиме Report-Only; если через неделю в консоли нет нарушений на ключевых страницах, режим отключается и политика начинает блокировать всё лишнее.

Вопросы и ответы

Сломает ли CSP мой сайт?

Может, если сразу включить блокировку. Поэтому начинайте с Content-Security-Policy-Report-Only: он только сообщает о нарушениях. Блокировку включайте, когда сообщений не останется.

Нужен ли CSP небольшому сайту?

Да, особенно на популярных CMS с плагинами. Большинство массовых взломов — внедрение скриптов через уязвимые расширения, и CSP заметно снижает их последствия.

Почему 'unsafe-inline' — это плохо?

Потому что внедрённый злоумышленником скрипт обычно и есть встроенный. Разрешив inline-скрипты, вы разрешаете и его. Используйте nonce или hash.

Генератор проверяет мой сайт?

Нет. Страница не делает запросов к вашему или другим сайтам — она только собирает строку политики из выбранных параметров.

Чем frame-ancestors отличается от X-Frame-Options?

Обе защищают от встраивания сайта в чужой фрейм. frame-ancestors — современная замена с гибкими правилами; X-Frame-Options можно оставить для старых браузеров.

Как узнать, какие домены использует мой сайт?

Откройте сайт с политикой в режиме Report-Only и посмотрите консоль браузера (F12 → Console) и вкладку Network на ключевых страницах: каждое нарушение политики там отображается с адресом источника.

Когда нужна команда

Кибербезопасность

Проведём аудит сайта и инфраструктуры, закроем уязвимости, настроим заголовки, почту и резервное копирование.

Другие инструменты