0Pricing
React Academy · Урок

Защита от CSRF в React и настройках API

Реализуйте файлы cookie SameSite, токены CSRF и схемы с двойной отправкой cookie в настройках React SPA и SSR

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

Что такое CSRF

Подделка межсайтовых запросов (CSRF) — это атака, при которой вредоносный веб-сайт обманом заставляет браузер пользователя отправить аутентифицированный запрос к Вашему API. Поскольку браузер автоматически прикрепляет cookie к запросам, сервер не может отличить законный запрос из Вашего приложения от поддельного запроса с сайта злоумышленника.

Почему cookie делают CSRF возможной

Cookie являются основной причиной уязвимости CSRF. Когда пользователь входит в Ваше приложение, его сеансовый cookie сохраняется в браузере. Когда пользователь посещает страницу злоумышленника, злоумышленник может инициировать отправку формы или запрос fetch к Вашему API, и браузер автоматически добавит сеансовый cookie, а значит, аутентифицирует вредоносный запрос.

Атрибут cookie SameSite

Атрибут cookie SameSite сообщает браузерам, когда нужно включать cookie в межсайтовые запросы. У него есть три значения: Lax (значение по умолчанию в современных браузерах — блокирует межсайтовые POST, но разрешает GET), Strict (блокирует все межсайтовые запросы, включая переходы GET) и None (разрешает межсайтовые запросы, но требует HTTPS и защищенного флага).

SameSite=Lax и безопасные API

SameSite=Lax блокирует межсайтовые запросы POST, PUT, DELETE и PATCH — методы, используемые для изменения данных. Если Ваш API использует GET только для чтения, а POST — для всех изменений, SameSite=Lax эффективно предотвращает CSRF для SPA в современных браузерах. Сегодня это базовая мера защиты, на которую опирается большинство приложений.

Шаблон двойной отправки cookie

Шаблон двойной отправки cookie — это мера защиты от CSRF, при которой сервер устанавливает случайный токен CSRF в cookie без флага HttpOnly. Клиент считывает значение этого cookie и включает его в качестве пользовательского заголовка запроса (например, X-CSRF-Token). Сервер проверяет, совпадает ли значение заголовка со значением cookie. Злоумышленник не может прочитать cookie из другого источника, поэтому не может установить правильный заголовок.

Шаблон синхронизирующего токена

Шаблон синхронизирующего токена создает на сервере уникальный токен CSRF для каждого сеанса пользователя. В формах HTML токен встраивается в скрытое поле. Для вызовов API в SPA токен предоставляется через конечную точку или метатег и отправляется в пользовательском заголовке. Сервер проверяет токен в каждом запросе, изменяющем состояние.

JWT в заголовке авторизации: уязвимость отсутствует

SPA на React, которое хранит свой JWT в памяти или в localStorage и отправляет его в заголовке Authorization: Bearer, не подвержено классической CSRF. Атаки CSRF используют аутентификацию на основе cookie — страница злоумышленника не может установить пользовательские заголовки в междоменных запросах из-за ограничений CORS, поэтому не может подделать заголовок Authorization.

Пользовательские заголовки запросов как защита от CSRF

Простые междоменные запросы (отправка формы POST, загрузка изображения) не позволяют использовать пользовательские заголовки. Только запросы, проходящие предварительную проверку CORS, могут содержать пользовательские заголовки, а для запросов с предварительной проверкой требуется явное разрешение сервера. API, требующий пользовательский заголовок (например, X-Requested-With: XMLHttpRequest) для всех операций изменения, по своей сути защищен от простых атак CSRF.

CORS и CSRF — это разные механизмы

CORS определяет, какие источники могут прочитать ответ на межисточниковый запрос. CSRF связан с тем, какие источники могут отправлять запросы, изменяющие состояние. Настройка CORS для ограничения источников не предотвращает CSRF: браузер всё равно отправляет запрос и файл cookie, а CORS лишь определяет, виден ли ответ коду JavaScript. Для атаки CSRF не требуется читать ответ.

Рекомендации по настройке сеансовых файлов cookie

Настройте сеансовые файлы cookie с такими параметрами: HttpOnly: true (не позволяет JavaScript читать файл cookie и блокирует кражу токенов с помощью XSS), Secure: true (файл cookie отправляется только по HTTPS), SameSite: Lax или Strict (предотвращает CSRF), а также с подходящим значением Max-Age или сроком действия. Все четыре атрибута вместе значительно повышают безопасность управления сеансами.

Защита от CSRF в маршрутизаторе приложений Next.js

Маршрутизатор приложений Next.js использует серверные действия, представляющие собой POST-запросы. Next.js реализует защиту от CSRF, проверяя заголовок Origin на соответствие имени хоста: запросы из неожиданных источников отклоняются. Эта встроенная проверка в сочетании с сеансовыми файлами cookie SameSite=Lax обеспечивает надежную защиту от CSRF для операций изменения данных на основе серверных действий.

Атрибут файла cookie SameSite

Какое значение файла cookie SameSite блокирует межсайтовые запросы POST, но разрешает межсайтовые переходы GET?

Итоги урока

CSRF использует аутентификацию на основе файлов cookie, заставляя браузер отправлять межсайтовые запросы от имени аутентифицированного пользователя. SameSite=Lax — базовая защита для современных браузеров. Дополнительную защиту обеспечивают шаблоны двойной отправки файла cookie и синхронизирующего токена. SPA на React, использующие JWT в заголовках авторизации, по своей природе устойчивы к CSRF. Пользовательские обязательные заголовки и предварительная проверка CORS также снижают риск CSRF. Всегда сочетайте HttpOnly + Secure + SameSite для сеансовых файлов cookie.

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

Урок «Защита от CSRF в React и настройках API» бесплатный?

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

Чему я научусь в уроке «Защита от CSRF в React и настройках API»?

Реализуйте файлы cookie SameSite, токены CSRF и схемы с двойной отправкой cookie в настройках React SPA и SSR Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

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

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

Сколько времени занимает урок «Защита от CSRF в React и настройках API»?

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

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

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

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

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