← Назад к вопросам

Что такое CSP?

2.8 Senior🔥 121 комментариев
#Браузер и сетевые технологии

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Content Security Policy (CSP)

CSP — это механизм безопасности браузера, который помогает защитить веб-приложение от различных типов атак, таких как XSS (Cross-Site Scripting), clickjacking и инъекция вредоносного кода. CSP работает путём установления набора правил, которые определяют, какие ресурсы (скрипты, стили, изображения и т.д.) разрешено загружать и выполнять на странице.

Как работает CSP

CSP реализуется через HTTP-заголовок Content-Security-Policy, который отправляется сервером вместе с ответом. Браузер парсит этот заголовок и применяет указанные ограничения при загрузке ресурсов.

Основные директивы CSP

  • default-src — базовая политика для всех типов контента
  • script-src — управление загрузкой и выполнением скриптов
  • style-src — управление загрузкой стилей
  • img-src — управление загрузкой изображений
  • font-src — управление загрузкой шрифтов
  • connect-src — управление соединениями (fetch, XMLHttpRequest, WebSocket)
  • frame-ancestors — контроль, какие страницы могут встраивать текущую страницу в iframe

Пример использования

app.use((req, res, next) => {
  res.setHeader(
    "Content-Security-Policy",
    "default-src 'self'; script-src 'self' 'unsafe-inline' https://trusted-cdn.com"
  );
  next();
});

Значения директив

  • 'self' — разрешить только ресурсы с того же источника
  • 'unsafe-inline' — разрешить встроенные скрипты/стили (рискованно)
  • 'unsafe-eval' — разрешить eval() и похожие функции
  • https://trusted-domain.com — разрешить ресурсы только с конкретного домена
  • * — разрешить ресурсы с любых источников
  • 'none' — запретить загрузку ресурсов этого типа

Практические примеры

const strictPolicy = "default-src 'none'; script-src 'self'; style-src 'self'";
const modestPolicy = "default-src 'self'; script-src 'self' https://cdnjs.cloudflare.com";
const devPolicy = "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'";

Режимы CSP

  • Content-Security-Policy — строгий режим, браузер блокирует нарушения
  • Content-Security-Policy-Report-Only — режим отчётности, браузер не блокирует

Преимущества

  • Защита от XSS-атак
  • Контроль над источниками ресурсов
  • Мониторинг и логирование нарушений
  • Снижение поверхности атаки

Рекомендации

  1. Начните с режима Report-Only для анализа
  2. Постепенно ужесточайте политику
  3. Используйте nonce или hash вместо 'unsafe-inline'
  4. Регулярно проверяйте логи нарушений
  5. Документируйте все исключения