Перейти к содержимому
Skip to content
← Все статьи

Content Security Policy (CSP) — полное руководство по настройке

Content Security Policy (CSP) — это заголовок безопасности, который указывает браузеру, откуда разрешено загружать ресурсы: скрипты, стили, изображения, шрифты, фреймы и другие. CSP — один из самых мощных инструментов защиты от XSS-атак (Cross-Site Scripting), инъекций кода и clickjacking.

Зачем нужен CSP

XSS остаётся одной из самых распространённых веб-уязвимостей по версии OWASP Top 10. Даже при тщательной фильтрации пользовательского ввода существует риск пропустить вектор атаки. CSP работает как последний рубеж обороны: даже если злоумышленник внедрит вредоносный код, браузер не выполнит его, если источник не разрешён в политике.

Что защищает CSP:

Синтаксис CSP

CSP передаётся через HTTP-заголовок:

Content-Security-Policy: directive-1 value1 value2; directive-2 value3;

Каждая директива контролирует определённый тип ресурсов:

ДирективаЧто контролируетПример
default-srcFallback для всех типов ресурсовdefault-src 'self'
script-srcJavaScriptscript-src 'self' cdn.example.com
style-srcCSSstyle-src 'self' 'unsafe-inline'
img-srcИзображенияimg-src 'self' data: https:
font-srcШрифтыfont-src 'self' fonts.gstatic.com
connect-srcAJAX, WebSocket, Fetchconnect-src 'self' api.example.com
frame-srcIframe источникиframe-src youtube.com
frame-ancestorsКто может встроить вас в iframeframe-ancestors 'none'
form-actionКуда могут отправляться формыform-action 'self'
base-uriОграничение для тега <base>base-uri 'self'
object-srcFlash, Java-апплетыobject-src 'none'

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

ЗначениеОписание
'self'Только с текущего домена
'none'Полный запрет
'unsafe-inline'Разрешить inline-код (снижает защиту)
'unsafe-eval'Разрешить eval() (снижает защиту)
'nonce-abc123'Разрешить элементы с указанным nonce
'strict-dynamic'Доверять скриптам, загруженным доверенными скриптами
https:Любой HTTPS-источник
data:Data URI (например, data:image/png)
*.example.comЛюбой поддомен example.com

Примеры конфигураций CSP

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

Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; frame-ancestors 'none'; form-action 'self'; base-uri 'self'; object-src 'none'

Сайт с Google Analytics и шрифтами

Content-Security-Policy: default-src 'self'; script-src 'self' https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https://www.google-analytics.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://www.google-analytics.com; frame-ancestors 'none'

Строгая политика с nonce

Content-Security-Policy: default-src 'self'; script-src 'nonce-rAnd0mVaLu3' 'strict-dynamic'; style-src 'self' 'nonce-rAnd0mVaLu3'; object-src 'none'; base-uri 'self'

При использовании nonce каждый тег <script> и <style> должен содержать атрибут:

<script nonce="rAnd0mVaLu3">
  // Этот скрипт будет выполнен
</script>

Режим Report-Only

Перед включением CSP в боевой среде используйте режим отчётов:

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

В этом режиме браузер не блокирует ресурсы, а только отправляет JSON-отчёт о нарушениях. Это позволяет выявить все сторонние ресурсы, прежде чем вводить ограничения.

Пошаговое внедрение CSP

  1. Проверьте текущие заголовки безопасности с помощью проверки HTTP-заголовков enterno.io
  2. Составьте список всех сторонних ресурсов на сайте (аналитика, шрифты, CDN, виджеты)
  3. Создайте политику в режиме Report-Only
  4. Мониторьте отчёты о нарушениях 1–2 недели
  5. Добавьте недостающие источники в политику
  6. Включите CSP в принудительном режиме
  7. Продолжайте мониторить отчёты

Типичные ошибки

CSP и производительность

CSP не только повышает безопасность, но и может положительно влиять на производительность:

Проверка CSP

Используйте инструмент проверки HTTP-заголовков enterno.io для анализа текущей CSP-политики вашего сайта. Инструмент покажет установленный заголовок Content-Security-Policy и поможет выявить его отсутствие.

Также полезны инструменты разработчика в браузере: вкладка Console покажет все нарушения CSP с подробной информацией о заблокированных ресурсах.

Проверьте ваш сайт прямо сейчас

Проверить →
Другие статьи: Безопасность
Безопасность
Чек-лист безопасности веб-сервера: Nginx и Apache
16.03.2026 · 23 просм.
Безопасность
Стратегии ограничения частоты запросов для веб-API
16.03.2026 · 11 просм.
Безопасность
CORS: руководство по Cross-Origin Resource Sharing
16.03.2026 · 10 просм.
Безопасность
WAF: что это и как защищает сайт
14.03.2026 · 12 просм.