SecScan

Content-Security-Policy (CSP): защита от XSS

Что такое заголовок CSP, как его настроить, как избавиться от 'unsafe-inline' и безопасно протестировать в режиме Report-Only.

Что такое CSP

Content-Security-Policy сообщает браузеру, из каких источников страница может загружать скрипты, стили, изображения и фреймы. Даже если злоумышленнику удалось внедрить вредоносный скрипт (XSS), CSP может помешать его выполнению.

Базовая политика

HTTP
Content-Security-Policy: default-src 'self'; img-src 'self' data:; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
  • default-src 'self' — всё только с вашего домена.
  • object-src 'none' — запрещает загрузку кода через плагины.
  • base-uri 'self' — нельзя подменить адреса через тег <base>.
  • frame-ancestors 'self' — сайт нельзя встроить во фрейм чужого сайта (clickjacking).

Самые частые ошибки

  • 'unsafe-inline' разрешает inline-скрипты и сводит на нет главную цель CSP. Используйте nonce или hash.
  • 'unsafe-eval' и * (звёздочка) — почти не дают защиты.
  • Разрешение https: или data: в script-src — значит можно грузить скрипты с любого HTTPS-сайта.

Безопасное внедрение

Сначала проверьте политику с заголовком Content-Security-Policy-Report-Only: посмотрите нарушения в консоли браузера и добавьте нужные источники. Когда всё работает, переименуйте заголовок в Content-Security-Policy.

SecScan в глубокой проверке анализирует CSP и перечисляет слабые места (unsafe-inline, wildcard, общие CDN-хосты).

Другие руководства