CSRF (Cross-Site Request Forgery)
CSRF — это тип атаки, при которой злоумышленник заставляет пользователя выполнить нежелательные действия в веб-приложении, где пользователь в данный момент аутентифицирован.
Как работает CSRF
- Пользователь аутентифицирован на сайте A
- Пользователь посещает злонамеренный сайт B
- Сайт B отправляет запрос на сайт A от имени пользователя
- Браузер автоматически добавляет cookies для сайта A
- Сайт A выполняет действие, думая что запрос от пользователя
Пример CSRF атаки
1<!-- Злонамеренная страница -->
2<img src="https://bank.com/transfer?to=attacker&amount=1000" />
3
4<!-- Или через форму -->
5<form action="https://bank.com/transfer" method="POST" style="display:none;">
6 <input name="to" value="attacker" />
7 <input name="amount" value="1000" />
8 <input type="submit" />
9</form>
10<script>
11 document.forms[0].submit();
12</script>
Методы защиты от CSRF
- CSRF токены — уникальные токены для каждого запроса
- SameSite cookies — ограничение отправки cookies
- Referer проверка — проверка источника запроса
- Double Submit Cookies — токен в cookie и параметре
- Custom Headers — добавление кастомных заголовков
CSRF Token реализация
SameSite Cookies
Проверка Referer заголовка
Тестирование на CSRF
- Создайте форму на стороннем сайте
- Попробуйте выполнить действия без CSRF токена
- Используйте инструменты как Burp Suite, OWASP ZAP
- Проверьте настройки SameSite cookies
FAQ
В чем разница между CSRF и XSS?
XSS выполняет код в браузере жертвы на том же сайте, CSRF заставляет браузер выполнить запрос на другой сайт от имени пользователя.