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;