Генератор CSP
Соберите заголовок Content-Security-Policy, не заучивая синтаксис. Выбирайте источники для каждой директивы, начните с шаблона, посмотрите, что слабо, и скопируйте результат для сервера, тега meta или файла _headers. Всё работает в браузере.
Соберите политику
Начните с шаблона, отметьте нужные каждой директиве источники и добавьте свои хосты. Политика обновляется сразу.
Политика собирается в браузере. Ничего из того, что вы выбираете или вставляете, не отправляется на сервер, не записывается и не сохраняется.
Content-Security-Policy точно указывает браузеру, откуда странице разрешено загружать скрипты, стили, изображения, шрифты и фреймы. Всё остальное блокируется, и большинство XSS-уязвимостей превращается из взлома в ошибку в консоли. Сложность — в синтаксисе: одна пропущенная кавычка или источник, и сайт ломается. Генератор пишет политику за вас и отмечает настройки, которые незаметно сводят защиту на нет.
Главные преимущества
Типичные сценарии
Как этим пользоваться
- 1.Выберите шаблон. Начните со Строгой основы и добавьте Google Analytics 4, Google Fonts или другие шаблоны, которые использует сайт. Или импортируйте текущую политику.
- 2.Настройте каждую директиву. Отметьте нужные ключевые слова и введите дополнительные хосты, например
https://cdn.example.ru, в поле под директивой. - 3.Прочитайте проверку. Исправьте всё, что отмечено ✗, и примите решение по пунктам с ⚠. Каждое сообщение объясняет, почему это важно.
- 4.Сначала разверните в режиме отчётов. Включите режим «только отчёты», скопируйте фрагмент для сервера и несколько дней следите за консолью браузера, прежде чем применять политику.
Самые важные директивы
Начните строго с default-src и открывайте только то, что нужно реальной функции. На этих шести настройках держится почти вся защита.
'unsafe-inline'; разрешайте встроенный код через nonce или хеш и указывайте только реально используемые хосты скриптов.Ключевые возможности
- 14 директив, у каждой свои ключевые слова и произвольные хосты
- Шаблоны: строгая основа, Google Analytics 4, Google Fonts, YouTube и Stripe
- Импорт существующего заголовка для проверки или доработки
- Проверка на лету: unsafe-inline, unsafe-eval, https:, data:, подстановочные знаки и пропущенные директивы
- Режим «только отчёты», upgrade-insecure-requests и report-uri
- Вывод для HTTP-заголовка, тега meta, Nginx, Apache и файлов _headers
- Работает в браузере; ничего не загружается
CSP — это вторая линия обороны
CSP ограничивает ущерб, когда уязвимость внедрения всё же проскочила; она не заменяет экранирование вывода и проверку ввода. Политика, разрешающая скрипты 'unsafe-inline' или любой HTTPS-хост, выглядит надёжно, но почти ничего не останавливает, так что предупреждения здесь — это и есть основная работа.
Внедряйте новую политику аккуратно: отправьте её как Report-Only, исправьте то, что ломается, затем применяйте. После выкладки наш проверщик заголовков безопасности подтвердит, что заголовок действительно отправляется вместе с HSTS и остальными. А руководство по заголовкам безопасности объясняет, как CSP сочетается с ними.
Частые вопросы
Что такое Content-Security-Policy?⌄
Это HTTP-заголовок ответа, который перечисляет, откуда странице можно загружать скрипты, стили, изображения, шрифты, фреймы и другие ресурсы. Всё остальное браузер блокирует. Главная задача — остановить межсайтовый скриптинг: даже если злоумышленник внедрит тег script, браузер откажется его выполнять.
Заголовок или тег meta?⌄
По возможности используйте HTTP-заголовок. Тег meta подходит для большинства директив, но не поддерживает frame-ancestors, report-uri и режим отчётов и действует только на содержимое после тега. Это запасной вариант для хостинга, где нельзя задать заголовки.
Почему 'unsafe-inline' в script-src — это плохо?⌄
Потому что он разрешает выполнять любой встроенный скрипт, в том числе внедрённый злоумышленником, — именно то, от чего CSP должна защищать. Если встроенные скрипты нужны, дайте каждому nonce, меняющийся при каждом ответе, или разрешите его хеш SHA-256. 'unsafe-inline' в style-src гораздо менее опасен и часто допустим.
Сломает ли CSP мой сайт?⌄
Строгая политика обычно что-нибудь блокирует в первый раз: тег аналитики, шрифт, встроенное видео. Поэтому сначала отправьте её как Content-Security-Policy-Report-Only, следите за консолью или точкой сбора отчётов, добавьте действительно нужные источники и только потом применяйте.
Как проверить, что CSP работает?⌄
Откройте страницу и посмотрите заголовки ответа в инструментах разработчика или проверьте домен проверщиком заголовков безопасности. Нарушения появляются в консоли с директивой и заблокированным URL — это прямо подсказывает, что добавить.