CSP (Content Security Policy): что это и зачем нужен

CSP — HTTP-заголовок безопасности, запрещающий выполнение посторонних скриптов и загрузку ресурсов с чужих сайтов. Защищает от XSS-атак.

безопасностьcspxssзаголовкиweb-security

Что такое CSP

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

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

CSP поддерживается всеми современными браузерами. Внедрён в виде стандарта W3C.

Зачем нужен CSP

Защита от XSS: CSP блокирует выполнение inline-скриптов и скриптов с неразрешённых доменов.

Защита от clickjacking: директива frame-ancestors запрещает вставку сайта в iframe на чужих доменах.

Контроль загрузки ресурсов: предотвращает загрузку данных на сторонние серверы.

Отчётность: CSP умеет отправлять отчёты о нарушениях политики на ваш сервер.

SEO: Google учитывает безопасность сайта при ранжировании. CSP — часть общей безопасности.

Как настроить CSP

Базовая политика

Content-Security-Policy: default-src 'self'; script-src 'self' cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;

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

default-src — источник по умолчанию для всех ресурсов:

default-src 'self'

script-src — источники JavaScript:

script-src 'self' https://cdn.example.com 'nonce-abc123'

style-src — источники CSS:

style-src 'self' https://fonts.googleapis.com 'unsafe-inline'

img-src — источники изображений:

img-src 'self' data: https://cdn.example.com

font-src — источники шрифтов:

font-src 'self' https://fonts.gstatic.com

frame-ancestors — кто может встраивать в iframe:

frame-ancestors 'none'

connect-src — источники для XHR, WebSocket, Fetch:

connect-src 'self' https://api.example.com

Значения источников

ЗначениеОписание
'self'Только текущий домен
'none'Запрещено полностью
'unsafe-inline'Разрешить inline-скрипты/стили
'unsafe-eval'Разрешить eval()
https:Любой HTTPS источник
https://example.comКонкретный домен

Nginx конфигурация

add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-$request_id'; style-src 'self' 'unsafe-inline';" always;

Режим отчётов (без блокировки)

Для тестирования политики без блокировки ресурсов:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report

Проверка CSP на reChecker

Используйте CSP Analyzer для анализа политики безопасности. Инструмент покажет:

  • Наличие заголовка CSP
  • Список всех директив и их значений
  • Потенциально опасные настройки (unsafe-inline, unsafe-eval)
  • Рекомендации по ужесточению политики

FAQ

CSP ломает мой сайт — что делать? Используйте режим Content-Security-Policy-Report-Only для тестирования без блокировки. Смотрите ошибки в консоли браузера и добавляйте нужные источники в политику постепенно.

Нужен ли CSP для статического сайта? Да, особенно если сайт принимает пользовательский ввод. Даже статические сайты через CDN могут подвергаться атакам через заражённые сторонние скрипты.

unsafe-inline — это плохо? Это ослабляет защиту CSP, так как разрешает inline-скрипты. Лучшая практика — использовать nonce (одноразовые токены) или hash для конкретных inline-блоков вместо глобального unsafe-inline.

Попробуйте инструмент

Проверьте csp (content security policy) на вашем сайте с помощью бесплатного инструмента.

CSP Analyzer

Поддержка reChecker

Нашли баг, сбой или ошибку в работе reChecker? Есть предложение по улучшению? Напишите нам, чтобы мы проверили и исправили проблему в сервисе.

Эта форма для обратной связи по работе reChecker. Если нужна разработка или поддержка вашего сайта, отправьте отдельную заявку:

Для ответа укажите минимум один контакт: email или телефон.