Что такое CSP?
CSP (Content Security Policy) — это заголовок, который задаёт браузеру список источников, откуда разрешено загружать скрипты, стили, шрифты, изображения и фреймы, а все прочие обращения блокирует.
CSP (Content Security Policy) дословно — «политика безопасности содержимого». Простыми словами: вы один раз прописываете правила, и браузер сам отсекает всё, что им противоречит, — например, чужой скрипт, внедрённый через дыру в форме комментариев. Бизнесу это нужно, чтобы не потерять деньги и трафик: взломанный сайт отдаёт клиентов мошенникам, а поисковики и антивирусы быстро помечают его как опасный.
Как работает CSP
Политика передаётся в ответе сервера как обычный заголовок HTTP — вместе с документами, скриптами и картинками. Браузер читает правила и ещё до отрисовки страницы решает, что можно исполнить, а что нужно заблокировать. Неподходящий ресурс просто не загрузится, а в консоли появится сообщение о нарушении.
Правила описываются директивами. Главная — default-src, она задаёт поведение по умолчанию. Дальше её уточняют:
- script-src — откуда можно брать JavaScript;
- style-src — источники CSS;
- img-src, font-src, connect-src — картинки, шрифты, AJAX-запросы;
- frame-ancestors — какие сайты вправе встраивать ваши страницы в iframe.
Значение 'self' разрешает только собственный домен, 'none' запрещает всё, а конкретные адреса перечисляются вручную. Инлайновые скрипты по умолчанию не работают: для них нужен nonce или hash. Именно это делает CSP барьером для XSS — даже если злоумышленник вставит код в пользовательский контент, браузер его не выполнит.
Зачем CSP нужен бизнесу
Основная задача — защита от XSS (межсайтового скриптинга). Это самый частый вектор атак: чужой код попадает на страницу и начинает воровать cookies, пароли и данные карт, подменять платёжные формы, показывать фишинговые баннеры.
Последствия для компании выходят далеко за пределы ИТ:
- потеря заказов и доверия — клиенты уходят с «заражённого» сайта;
- просадка позиций: поисковики помечают взломанные страницы как опасные и режут трафик;
- штрафы и претензии, если утекли персональные данные;
- требования стандартов и аудитов безопасности (PCI DSS, внутренние проверки) прямо предписывают CSP.
CSP работает в паре с другими механизмами. HTTPS шифрует канал и не даёт подменить содержимое по пути, но не остановит чужой скрипт, попавший в HTML изнутри. CSP закрывает именно эту дыру и внешне ничего не меняет для посетителя.
Как внедрять CSP
Главная ошибка — включить строгую политику сразу на боевом сайте и уронить половину функциональности. Рабочий порядок такой:
- Соберите инвентаризацию: какие скрипты, стили и шрифты реально используются — свои, аналитика, чаты, карты, реклама.
- Запустите заголовок Content-Security-Policy-Report-Only с директивой report-to: он ничего не блокирует, а только присылает отчёты о нарушениях.
- Постепенно ужесточайте правила: начните с default-src 'self' и добавляйте домены сторонних сервисов. Если часть файлов раздаёт CDN, его домен вносится в script-src и style-src отдельно.
- Переведите заголовок в боевой режим и настройте мониторинг отчётов.
К 2026 году стандартом стали подходы, которые упрощают жизнь: strict-dynamic позволяет доверять скриптам, подгруженным уже доверенным кодом, а Trusted Types в браузерах на Chromium запрещают вставлять HTML-строки без проверки. Полезен и SRI — контроль хеша внешнего файла.
Типичные ошибки
- 'unsafe-inline' и 'unsafe-eval' «чтобы всё работало» — они обнуляют половину защиты;
- разрешение * или https: целиком: политика формально есть, толку от неё нет;
- забытые источники — карты, видео, чаты и платёжные виджеты отваливаются у клиентов;
- тесты только на десктопе: мобильные вебвью и старые браузеры ведут себя иначе;
- игнорирование отчётов: политику настроили и больше не смотрят, что она блокирует.
Отдельно проверьте сайты с формами, комментариями и загрузкой файлов: чем больше пользовательского контента, тем аккуратнее описываются источники. CSP — не замена валидации данных на сервере, а второй контур обороны.
Вывод
CSP — недорогой и проверенный способ снизить риск XSS и защитить данные клиентов: заголовок настраивается один раз, а работает постоянно. Начинайте с режима отчётов, постепенно сужайте разрешения и следите за стандартами вроде strict-dynamic и Trusted Types. Тогда политика не сломает сайт, а станет надёжным фильтром для всего лишнего.