Content Security Policy (CSP) — HTTP-заголовок, который сообщает браузеру, откуда разрешено загружать скрипты, стили, изображения и другие ресурсы. Это эффективная защита от XSS-атак и data injection.
Базовые директивы CSP
| Директива | Контролирует |
|---|---|
| default-src | Источник по умолчанию для всех ресурсов |
| script-src | JavaScript |
| style-src | CSS |
| img-src | Изображения |
| connect-src | AJAX, WebSocket, Fetch |
| font-src | Шрифты |
| frame-src | iframes |
| report-uri | URL для отчётов о нарушениях |
Примеры CSP политик
Строгая политика (для простых сайтов)
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'
Для WordPress с Google Fonts и GTM
Content-Security-Policy:
default-src 'self';
script-src 'self' 'unsafe-inline' https://www.googletagmanager.com https://www.google-analytics.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com;
img-src 'self' data: https://www.google-analytics.com;
Настройка через .htaccess
<IfModule mod_headers.c>
Header always set Content-Security-Policy " default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self';"
</IfModule>
Режим Report-Only для тестирования
# Не блокирует, только присылает отчёты
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report.php
💡 Начинайте с
Content-Security-Policy-Report-Only — собирайте нарушения неделю, затем переходите на строгий CSP без поломки сайта.⚠️
'unsafe-inline' и 'unsafe-eval' ослабляют защиту. Используйте nonce или hash для инлайн-скриптов в production.