CSRF

3 года назад

Nikolai Gagarinov

Ответы

1

CSRF — это уязвимость, при которой злоумышленник вынуждает браузер пользователя отправить запрос на сайт, где он уже авторизован. Внешне всё выглядит так, будто действие выполняет сам пользователь, хотя инициатором является посторонний источник. Механизм принципиально отличается от XSS: здесь вредоносный код не внедряется в страницу, а используется доверие браузера к сохраненной сессии.

Определение и суть механизма

Полное название — cross-site request forgery. Смысл уязвимости в том, что браузер автоматически подставляет cookie, токены сессии и другие данные авторизации при обращении к привычному домену. Если человек одновременно открыт на нескольких сайтах, можно сформировать скрытый запрос к ресурсу, где он уже вошёл в аккаунт.

Пример: пользователь аутентифицирован в онлайн-банке, открывает сторонний сайт, а встроенный элемент (например, изображение или невидимая форма) незаметно отправляет запрос на перевод средств.

Ключевое условие — пользователь должен быть авторизован, а браузер должен автоматически подставить данные доступа.

Примеры злоумышленного использования

Подмена форм

Сторонний сайт может незаметно загрузить HTML-форму, которая отправляется автоматически. Пользователь ничего не нажимает, но операция выполняется.

Поскольку браузер доверяет домену, он автоматически прикрепляет сессионные файлы. Это позволяет выполнить нежелательное действие: изменить настройки профиля, отправить сообщение, добавить новый адрес доставки и т. д.

Реальные кейсы

  • попытка изменить email в профиле без ведома хозяина аккаунта;
  • создание публикации или комментария на площадке, где пользователь авторизован;
  • активация действий в панели администратора при работе в нескольких вкладках.

Такие ситуации происходили в блог-платформах, старых движках интернет-магазинов, сервисах с откровенно слабой защитой.

Механизмы защиты

Современные сайты используют сразу несколько уровней защиты — они дополняют друг друга, минимизируя риск несанкционированного запроса.

CSRF-токены

Каждая форма или важный запрос получает уникальный одноразовый маркер. Он сохраняется в сессии пользователя и передается вместе с запросом. Если маркер не совпадает, действие блокируется.

Double Submit Cookies

Принцип в том, что токен хранится одновременно в cookie и в теле запроса. Сторонний сайт не может прочитать cookie из-за ограничения доменов, поэтому не может корректно сгенерировать пару значений.

SameSite

Атрибут cookie, который ограничивает автоматическую отправку файлов авторизации. Режимы:

  • Strict — cookie передаются только при переходе внутри одного домена;
  • Lax — работает в большинстве безопасных сценариев;
  • None — требует HTTPS, используется для кросс-доменных приложений.

Проверка метода

Многие серверы допускают важные операции только в POST/PUT/DELETE, а GET разрешён только для безопасных действий.

Ошибки при реализации защиты

Даже при наличии встроенных механизмов сайты могут оставаться уязвимыми — чаще всего из-за неправильной настройки или устаревших подходов.

Неполная проверка токена

Иногда маркер передаётся, но сервер не сверяет его со значением из сессии. Это делает защиту формальной.

Устаревшие браузерные политики

Старые версии браузеров игнорировали атрибуты безопасности cookie. Если проект ориентирован на широкую аудиторию, необходимо учитывать совместимость, правильно выбирать режим SameSite.

Проблемы с шифрованием

Некорректная генерация токена или использование предсказуемых значений снижает эффективность механизма. Маркер должен быть случайным, трудно угадываемым, одноразовым.

Разрешение критичных действий через GET

Если изменение данных возможно обычной ссылкой, сторонний сайт может заставить браузер перейти по адресу автоматически (через изображение, iframe, редирект). Это грубая ошибка, которую нужно исключать на уровне серверной логики.

Современные подходы

Современная веб-безопасность использует более комплексный подход, чем просто токены.

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

Проект OWASP описывает несколько обязательных практик:

  • уникальные маркеры для всех критичных операций;
  • обязательная проверка метода запроса;
  • запрет на выполнение чувствительных действий без повторного подтверждения (например, смена пароля);
  • использование HTTPS;
  • корректная настройка cookie.

Работа с JWT

JSON Web Token сам по себе не защищает от подмены запроса. Однако при правильной конфигурации можно уменьшить риск:

  • хранить маркер не в cookie, а в памяти приложения;
  • использовать защищённые refresh-токены;
  • комбинировать JWT с SameSite, а также дополнительными механизмами подтверждения действий.

Использование дополнительных проверок

Например:

  • контроль происхождения запроса (Origin/Referer с корректными исключениями);
  • двойное подтверждение важных операций;
  • временные ограничения на чувствительные действия.

Инструменты для тестирования

Исследование CSRF-уязвимостей — важная часть пентестов и проверки безопасности.

Burp Suite

Позволяет генерировать вредоносные запросы, перехватывать трафик, изменять параметры и анализировать поведение сайта.

Postman

Помогает вручную формировать запросы, проверять обработку токенов и работу SameSite/cookie.

Скрипты и утилиты

Инструменты на Python или JavaScript упрощают автоматическую генерацию тестовых сценариев, а также проверку устойчивости API к подмене запросов.

Актуальные тренды

Развитие клиентских технологий меняет подход к защите.

Безопасность в SPA

Одностраничные приложения (React, Vue, Angular) часто хранят учетные данные в памяти, а не в cookie. Это снижает риск автоматической подстановки, но требует защиты API:

  • CORS-политики,
  • корректная обработка токенов,
  • проверка происхождения запроса.

Мобильные приложения

Мобильные клиенты редко используют cookie, но API, которым они пользуются, остается уязвимым. Поэтому на бэкенде применяются те же меры: токены, защищенные методы, строгая проверка источника.

Дополнительные уровни защиты

Появляются новые способы фильтрации: модели машинного обучения анализируют аномальное поведение, а серверы отслеживают подозрительные последовательности запросов.

Заключение

CSRF — одна из ключевых уязвимостей веб-приложений. Она использует доверие браузера к сохраненной сессии, может привести к выполнению нежелательных действий от имени пользователя. Надежная защита строится на комбинации методов: токенах, корректной настройке cookie, ограничении методов запросов, анализе происхождения обращения. Понимание современных рекомендаций помогает проектировать приложения, которые устойчивы к подмене запросов, что сохраняет безопасность пользователя.

месяц назад

Nikolai Gagarinov

0

CSRF (Cross-Site Request Forgery) - это вид атаки, при которой злоумышленник может заставить пользователя выполнить нежелательные действия на сайте. CSRF-атака основана на том, что некоторые сайты не проверяют, исходит ли запрос от доверенного источника, и выполняют запрос без проверки. Злоумышленник может отправить запрос на выполнение действия от имени пользователя, используя ссылку или форму, которую пользователь посетил. Для защиты от CSRF атак необходимо проверять все запросы на подлинность и происхождение.

2 года назад

Елена Редькина