← Назад в словарь

CSRF

CSRF (Cross-Site Request Forgery) — подделка межсайтового запроса

Суть в одном предложении

CSRF — это уязвимость, при которой злоумышленник заставляет браузер пользователя выполнить нежелательный запрос от его имени.

Краткое определение

CSRF (Cross-Site Request Forgery) — это атака, при которой пользователь, уже авторизованный на сайте, неосознанно отправляет запрос, инициированный сторонним сайтом.

Оригинал и перевод

  • Язык: английский
  • Оригинал: Cross-Site Request Forgery
  • Буквальный перевод: подделка межсайтового запроса

Синонимы и варианты написания

  • CSRF-атака
  • Межсайтовая подделка запроса
  • XSRF (альтернативное обозначение)

Происхождение

Уязвимость описана в начале 2000-х годов как одна из ключевых проблем веб-приложений, работающих на cookie-сессиях.

Где используется

  • Веб-приложения с cookie-авторизацией
  • CMS (WordPress, Bitrix, Joomla)
  • Интернет-банкинг
  • Админ-панели
  • SaaS-сервисы

Когда это важно

CSRF становится критичным, когда:

  • используется cookie-based авторизация
  • есть формы изменения данных (POST, PUT, DELETE)
  • отсутствует проверка CSRF-токена
  • отсутствует защита SameSite для cookies

Подробное объяснение

CSRF работает так:

  1. Пользователь авторизован на сайте example.com.
  2. Он переходит на вредоносный сайт.
  3. Этот сайт автоматически отправляет POST-запрос на example.com.
  4. Браузер прикладывает cookie-сессию.
  5. Сервер считает запрос легитимным.

Пример атаки:

<form action="https://example.com/transfer" method="POST">
  <input type="hidden" name="amount" value="10000">
  <input type="hidden" name="to" value="attacker">
</form>

<script>
  document.forms[0].submit();
</script>

Если сервер не проверяет CSRF-токен — перевод выполнится.


Как защищаются от CSRF

1️⃣ CSRF-токен

Сервер генерирует уникальный токен и проверяет его при отправке формы.

Пример (Laravel):

@csrf

Пример проверки:

$request->validate([
    '_token' => 'required'
]);

В HTTP-заголовке:

Set-Cookie: session=abc123; SameSite=Strict

Это запрещает отправку cookie при кросс-доменных запросах.


3️⃣ Проверка Origin / Referer

Сервер проверяет источник запроса:

if ($_SERVER['HTTP_ORIGIN'] !== 'https://example.com') {
    exit('Invalid origin');
}

Что не является CSRF

  • XSS
  • SQL Injection
  • Кража пароля

CSRF использует легитимную сессию пользователя, а не взлом.


Аналоги и связанные термины

  • XSS
  • Session
  • Cookie
  • SameSite
  • Authentication

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

«В админке добавлена проверка CSRF-токена для всех POST-запросов.»


Мини-FAQ

  • Работает ли CSRF при JWT? Если JWT хранится в localStorage — нет. Если в cookie — возможно.

  • Нужна ли защита CSRF для GET-запросов? Если GET изменяет данные — это архитектурная ошибка.


Смотри также

  • XSS
  • Authentication
  • Cookie
  • Session