Knowledge Base
Content-Security-Policy: защита от XSS
Как CSP защищает от XSS
Категория: HTTP · Риск: low
Как CSP защищает от XSS
CSP сообщает браузеру, откуда разрешено загружать ресурсы. Даже если атакующий внедрил `<script>`, браузер его заблокирует, если источник не в whitelist.
Директивы CSP
| Директива | Что контролирует | |-----------|-----------------| | `default-src` | Всё (fallback) | | `script-src` | JavaScript | | `style-src` | CSS | | `img-src` | Изображения | | `connect-src` | fetch/XHR | | `frame-ancestors` | Кто может встраивать в iframe | | `object-src` | Flash/плагины |
Безопасный базовый CSP
add_header Content-Security-Policy "
default-src 'self';
script-src 'self';
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self';
connect-src 'self';
object-src 'none';
frame-ancestors 'self';
" always;
Report-Only режим (тестирование без блокировки)
add_header Content-Security-Policy-Report-Only "
default-src 'self';
report-uri /csp-report;
" always;
Нарушения логируются, но не блокируются. Анализируйте логи 1–2 недели перед переключением в enforce-режим.
Использование nonce
# Генерировать nonce на сервере и подставлять в script-src и в тег <script>
add_header Content-Security-Policy "script-src 'nonce-$request_id' 'strict-dynamic'" always;