Политика безопасности контента (CSP)
Что такое Политика безопасности контента (CSP)?
Политика безопасности контента (CSP)HTTP-заголовок ответа, указывающий браузеру, какие источники скриптов, стилей, фреймов и других ресурсов допустимы, что снижает последствия XSS и инъекций данных.
CSP передаётся заголовком ответа Content-Security-Policy (или элементом meta) и задаёт детальный allow-list по типам ресурсов: script-src, style-src, img-src, connect-src, frame-ancestors и другим. Она стандартизирована W3C, а CSP Level 3 ввёл примитивы, которые делают строгие политики практически применимыми. Как мера эшелонированной защиты она существенно снижает последствия XSS, кликджекинга (через frame-ancestors) и mixed content, но не заменяет валидацию ввода и кодирование вывода.
Списки разрешённых хостов — классическая ошибка. Исследование Google (статья CSP Is Dead, Long Live CSP!, в которой проанализировано около миллиарда страниц) показало, что подавляющее большинство политик на основе хостов тривиально обходятся — обычно потому, что разрешённый CDN одновременно обслуживал JSONP-эндпоинты или размещал устаревшую сборку Angular/AngularJS, пригодную в качестве гаджета. Современный ответ — строгая CSP на основе nonce: каждый ответ выдаёт новый случайный nonce (script-src 'nonce-r4nd0m'), встроенные скрипты несут этот nonce, а внедрённый <script> без него попросту не выполняется. Сочетание nonce с 'strict-dynamic' позволяет доверенным скриптам подгружать собственные зависимости, полностью игнорируя списки хостов, что делает политику короткой и независимой от CDN. Всегда добавляйте object-src 'none' и base-uri 'none', чтобы закрыть обходы через теги <object> и <base>.
Разворачивайте политику безопасно с помощью Content-Security-Policy-Report-Only: она ничего не навязывает, но отправляет JSON-отчёты о нарушениях через report-to/report-uri, что позволяет настроить политику на реальном трафике до перехода в режим принудительного применения. GitHub, Google и Dropbox используют строгие CSP на основе nonce в продакшене. Помните, что заголовок применяется браузером на стороне клиента, поэтому он смягчает, а не предотвращает инъекции на стороне сервера.
flowchart TD
A[Сервер формирует ответ] --> B[Новый случайный nonce на каждый запрос]
B --> C["Header: script-src 'nonce-abc123' 'strict-dynamic'; object-src 'none'; base-uri 'none'"]
C --> D[Браузер разбирает страницу]
D --> E{У скрипта есть совпадающий nonce?}
E -->|Да: легитимный встроенный скрипт| F[Выполнение + strict-dynamic подгружает зависимости]
E -->|Нет: тег скрипта, внедрённый через XSS| G[Заблокировано]
G --> H[Отчёт о нарушении на эндпоинт report-to]
style F fill:#27ae60,color:#fff
style G fill:#c0392b,color:#fff● Примеры
- 01
Заголовок: 'Content-Security-Policy: script-src 'self' 'nonce-r4nd0m'; object-src 'none'; base-uri 'none'; frame-ancestors 'none'.
- 02
Режим отчётов: 'Content-Security-Policy-Report-Only' для тестирования более строгой политики до её включения.
● Частые вопросы
Что такое Политика безопасности контента (CSP)?
HTTP-заголовок ответа, указывающий браузеру, какие источники скриптов, стилей, фреймов и других ресурсов допустимы, что снижает последствия XSS и инъекций данных. Относится к категории Безопасность приложений в кибербезопасности.
Что означает Политика безопасности контента (CSP)?
HTTP-заголовок ответа, указывающий браузеру, какие источники скриптов, стилей, фреймов и других ресурсов допустимы, что снижает последствия XSS и инъекций данных.
Как защититься от Политика безопасности контента (CSP)?
Защита от Политика безопасности контента (CSP) обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Политика безопасности контента (CSP)?
Распространённые альтернативные названия: CSP.