Конструктор политики безопасности контента (CSP)
Постройте заголовок Content Security Policy интерактивно, директива за директивой.
О инструменте «Конструктор политики безопасности контента (CSP)»
Строит заголовок Content Security Policy интерактивно — выбирая, каким источникам разрешено загружать скрипты, стили, изображения, шрифты и другие типы ресурсов для страницы, и автоматически собирая правильный синтаксис директив. CSP — одна из самых эффективных защит от XSS, но также один из заголовков, который легче всего испортить вручную: одна пропущенная директива или слишком разрешительный wildcard могут либо сломать легитимный функционал страницы, либо незаметно свести на нет защиту. Тестирование новой политики в режиме Content-Security-Policy-Report-Only перед принудительным включением позволяет увидеть, что бы сломалось, не ломая продакшен.
Добавление 'unsafe-inline' или 'unsafe-eval' ради того, чтобы «починить» сломавшуюся страницу, сводит на нет большую часть защиты, которую даёт CSP — если политике для работы требуется одно из этих значений, на самом деле нужно исправлять собственные инлайн-скрипты или стили страницы.
Быстрые пресеты
Похожие инструменты
Практичная стартовая политика
Для сайта, который загружает всё со своего домена, это строгая и рабочая основа:
default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'
Сторонние источники (аналитику, CDN, шрифты) добавляйте только в ту директиву, которой они нужны.
Самые важные директивы
| Директива | Зачем |
|---|---|
default-src | Значение по умолчанию для всех директив загрузки, которые вы не задали. |
script-src | Главная защита от XSS. Избегайте 'unsafe-inline'; для нужных встроенных скриптов используйте nonce или хеши. |
object-src 'none' | Блокирует устаревшее содержимое плагинов. |
base-uri | Не даёт внедрённому тегу <base> перенаправить относительные URL. |
frame-ancestors | Определяет, кто может встраивать страницу во фрейм (защита от кликджекинга). Современная замена X-Frame-Options. |
form-action | Ограничивает, куда могут отправляться формы. |
Как внедрить, не сломав сайт
- Отправляйте политику в заголовке
Content-Security-Policy-Report-Only. Браузеры сообщают о нарушениях, но ничего не блокируют. - Откройте все важные страницы и проверьте нарушения в консоли браузера.
- Добавьте недостающие источники или вынесите встроенный код в файлы. Для встроенных скриптов, которые должны остаться, используйте значение
'nonce-…', новое для каждого ответа. - Переименуйте заголовок в
Content-Security-Policy, чтобы политика начала применяться.
Заголовок или тег meta
Тег <meta http-equiv="Content-Security-Policy"> работает для большинства директив, но frame-ancestors, report-uri и sandbox в нём игнорируются. Лучше использовать HTTP-заголовок. Что сайт отправляет на самом деле, покажет проверка заголовков безопасности.