Что такое Content Security Policy?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Content Security Policy (CSP)
Content Security Policy — это механизм безопасности, реализованный на уровне браузера для защиты от XSS-атак, внедрения вредоносного кода и других векторов атак на веб-приложения.
Как это работает
CSP определяет источники, из которых браузер может загружать различные типы ресурсов (скрипты, стили, изображения, фреймы и т.д.). Браузер блокирует загрузку ресурсов из неразрешённых источников.
Установка CSP
CSP задаётся через HTTP-заголовок Content-Security-Policy:
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self'; img-src *
Или через meta-тег в HTML:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src *">
Основные директивы CSP
default-src— политика по умолчанию для всех типов ресурсовscript-src— источники для JavaScript файловstyle-src— источники для CSS стилейimg-src— источники для изображенийconnect-src— разрешённые источники для AJAX, WebSocket, fetch запросовfont-src— источники для веб-шрифтовframe-src— разрешённые источники для встроенных фреймовobject-src— источники для плагинов (Flash и т.д.)
Значения источников
'self'— разрешить ресурсы с того же источника (протокол, домен, порт)*— разрешить ресурсы с любых источников'unsafe-inline'— разрешить inline-скрипты и стили (опасно!)'unsafe-eval'— разрешить eval() (опасно!)https://example.com— конкретный доменhttps:— разрешить HTTPS с любого домена
Пример для продакшена
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.googleapis.com; connect-src 'self' https://api.example.com; frame-ancestors 'none'
Отличие report-only режима
Для тестирования используй Content-Security-Policy-Report-Only. Браузер будет отправлять нарушения в report-uri, но не блокировать ресурсы:
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report
Защита от XSS
CSP предотвращает XSS-атаки запретом на inline-скрипты. Даже если злоумышленник внедрит <script>alert(1)</script>, браузер его не выполнит, если только не указано 'unsafe-inline'.
Практические советы
- Используй
'unsafe-inline'только если абсолютно необходимо - Регулярно проверяй нарушения CSP в браузерной консоли
- Тестируй новую политику в режиме
report-onlyперед продакшеном - Используй nonce для inline-скриптов вместо
'unsafe-inline'