0Pricing
React Academy · Урок

Политика безопасности содержимого для приложений React

Настройте строгий заголовок CSP, который блокирует встроенные скрипты и неавторизованные внешние ресурсы в приложениях React

«Политика безопасности содержимого для приложений React» — бесплатный урок React Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Что такое политика безопасности содержимого

Политика безопасности содержимого (CSP) — это заголовок HTTP-ответа, сообщающий браузеру, какие источники содержимого считаются доверенными. Объявляя точный список разрешенных скриптов, стилей, изображений и шрифтов, CSP не позволяет выполнять внедренное вредоносное содержимое — даже если уязвимость XSS позволяет злоумышленнику внедрить HTML на страницу.

default-src и script-src

default-src 'self' задает базовое правило: все типы ресурсов (скрипты, стили, изображения, шрифты и фреймы) могут загружаться только из того же источника. script-src 'self' ограничивает загрузку скриптов тем же источником и блокирует скрипты с внешних CDN, если они не указаны явно. Вместе эти две директивы образуют основу строгой CSP.

Почему важно блокировать eval

eval() преобразует строку в исполняемый код во время работы программы — именно это требуется XSS-полезным нагрузкам. CSP с script-src 'self' (без 'unsafe-eval') блокирует eval() и связанные функции, такие как new Function() и setTimeout(string). Это устраняет целый класс способов выполнения XSS-полезных нагрузок.

strict-dynamic для цепочек скриптов

'strict-dynamic' в script-src передает доверие скриптам, загруженным уже доверенными скриптами. Это позволяет использовать шаблоны динамической загрузки скриптов, применяемые сборщиками, без необходимости добавлять в список разрешенных каждый адрес CDN. Доверенный скрипт может загрузить дополнительные скрипты, и они наследуют это доверие.

CSP на основе хешей для встроенных скриптов

Если приложению требуется конкретный встроенный скрипт (например, фрагмент инициализации аналитики), можно вычислить его хеш SHA-256 и добавить 'sha256-base64hash' в script-src. Разрешается выполнять непосредственно на странице только скрипты с точно таким хешем. Любой скрипт, внедренный злоумышленником, будет иметь другой хеш и будет заблокирован.

CSP на основе одноразовых значений

Одноразовое значение — это криптографически случайное значение, генерируемое сервером для каждого запроса. Сервер добавляет это значение и в тег скрипта (<script nonce="abc123">), и в заголовок CSP (script-src 'nonce-abc123'). Выполняются только скрипты с правильным одноразовым значением. Злоумышленники не могут предсказать это значение, поэтому внедренные скрипты не могут его использовать.

Отчеты о нарушениях CSP

CSP поддерживает отправку отчетов о нарушениях через report-uri /csp-violation-endpoint или более новую директиву report-to. Когда браузер блокирует ресурс из-за CSP, он отправляет на конечную точку отчет в формате JSON. Отслеживание этих отчетов помогает выявлять как реальные проблемы конфигурации, так и активные попытки атак.

Реализация CSP в Next.js

В Next.js добавьте заголовки CSP в промежуточный обработчик: создайте middleware.ts, сгенерируйте одноразовое значение, задайте заголовок Content-Security-Policy и передайте это значение странице через заголовок ответа. Макет страницы считывает одноразовое значение из заголовка и применяет его ко всем встроенным скриптам и тегам стилей.

Тестирование CSP без блокировки

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

Нарушения CSP в консоли Chrome DevTools

Когда CSP блокирует ресурс, консоль Chrome DevTools показывает красное сообщение об ошибке с адресом заблокированного ресурса и нарушенной директивой. Эти сообщения бесценны во время разработки и тестирования. Каждое нарушение необходимо устранить: исправить политику, переместить ресурс в разрешенный источник или использовать одноразовое значение либо хеш.

Практическая политика CSP для SPA на React

Практическая CSP для SPA на React: default-src 'self'; script-src 'self' 'strict-dynamic' 'nonce-NONCE'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' https://api.yourdomain.com; frame-ancestors 'none'. Директива frame-ancestors 'none' также предотвращает атаки с перехватом кликов, блокируя встраивание приложения во фреймы.

CSP: script-src self

Что предотвращает директива script-src 'self' в политике безопасности содержимого?

Итоги урока

CSP — это HTTP-заголовок, объявляющий доверенные источники содержимого. default-src 'self' и script-src 'self' блокируют внешние скрипты и eval. Встроенные скрипты разрешаются с помощью хешей или одноразовых значений. 'strict-dynamic' поддерживает динамическую загрузку скриптов. Используйте Content-Security-Policy-Report-Only для тестирования перед включением принудительного применения. Next.js реализует CSP через промежуточный обработчик. Консоль DevTools показывает нарушения в реальном времени.

Часто задаваемые вопросы

Урок «Политика безопасности содержимого для приложений React» бесплатный?

Да — полный текст урока «Политика безопасности содержимого для приложений React» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Политика безопасности содержимого для приложений React»?

Настройте строгий заголовок CSP, который блокирует встроенные скрипты и неавторизованные внешние ресурсы в приложениях React Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Политика безопасности содержимого для приложений React»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. XSS в React: dangerouslySetInnerHTML и сторонние скрипты
  2. Защита от CSRF в React и настройках API
  3. Политика безопасности содержимого для приложений React
  4. Управление секретами и переменными окружения
← Назад к React Academy