Content Security Policy (CSP) — это механизм безопасности веб-приложений, который позволяет контролировать источники контента, загружаемого и исполняемого в браузере. CSP предотвращает множество атак, включая XSS (Cross-Site Scripting) и инъекции данных, задавая строгие правила, каким ресурсам можно доверять.
CSP задается с помощью HTTP-заголовка
Content-Security-Policy или мета-тега
<meta>. Политика состоит из
директив, каждая из которых отвечает за определенный
тип ресурсов:
default-src — базовый источник для всех ресурсов, если
для конкретного типа не указано другое правило.script-src — источники JavaScript.style-src — источники CSS.img-src — источники изображений.connect-src — источники для AJAX-запросов, WebSocket и
EventSource.font-src — источники шрифтов.frame-src — источники для
<iframe>.Пример базовой политики:
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline';
'self' — разрешает загрузку только с того же
домена.'unsafe-inline' — разрешает выполнение встроенных
скриптов и стилей (рекомендуется избегать).Preact как лёгкий фронтенд-фреймворк генерирует DOM-элементы и управляет состоянием компонентов. CSP напрямую влияет на следующие аспекты:
Инлайновые скрипты: Preact приложения часто
используют встроенные скрипты для начальной инициализации. CSP с
запретом инлайновых скриптов ('unsafe-inline') требует их
перемещения в отдельные файлы.
JSX и Preact-компоненты: JSX компилируется в
вызовы h() и render(). Генерация DOM через
Preact не создаёт проблем с CSP, если не используются динамические
eval() или Function().
Стили компонентов: Использование инлайновых
стилей в JSX (style={{color: 'red'}}) может требовать
директивы 'unsafe-inline' в style-src. Чтобы
полностью соответствовать CSP без 'unsafe-inline',
рекомендуется применять CSS-модули или внешние
CSS-файлы.
Динамическая загрузка ресурсов: Если
Preact-компоненты подгружают скрипты через fetch или
подключают внешние библиотеки, необходимо включать их домены в
script-src или connect-src.
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cdn.jsdelivr.net;
style-src 'self' https://fonts.googleapis.com;
img-src 'self' dat a:;
nonce для безопасного выполнения конкретного скрипта:<script nonce="random123">console.log('Preact initialization');</script>
HTTP-заголовок:
Content-Security-Policy: script-src 'self' 'nonce-random123';
script-src 'self' 'sha256-AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abcdef';
Это позволяет CSP блокировать любые изменения скрипта, повышая безопасность.
connect-src.'unsafe-inline' и
'unsafe-eval'.nonce или hash для скриптов,
которые нельзя вынести во внешние файлы.Content-Security-Policy-Report-Only.CSP обеспечивает эффективную защиту Preact-приложений от XSS и других атак. Корректная настройка директив позволяет сохранять функциональность динамических компонентов при строгих правилах безопасности.