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 работает так:
- Пользователь авторизован на сайте example.com.
- Он переходит на вредоносный сайт.
- Этот сайт автоматически отправляет POST-запрос на example.com.
- Браузер прикладывает cookie-сессию.
- Сервер считает запрос легитимным.
Пример атаки:
<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'
]);
2️⃣ SameSite cookie
В 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