Что такое CSRF уязвимость?
DOM и браузер
CSRF (Cross-Site Request Forgery) — это атака, при которой злоумышленник заставляет браузер жертвы выполнить нежелательный запрос к сайту, где она аутентифицирована, используя её cookie.
Как работает
Браузер автоматически прикрепляет cookie к запросам на домен. Если пользователь залогинен на bank.com, вредоносная страница может незаметно отправить запрос:
<!-- На сайте злоумышленника -->
<img src="https://bank.com/transfer?to=hacker&amount=1000" />
<form action="https://bank.com/transfer" method="POST">...</form>Cookie сессии прикрепится автоматически — сервер примет запрос за легитимный.
Защита
- SameSite cookie —
SameSite=Lax/Strictне отправляет cookie при кросс-сайт запросах (основная современная защита). - CSRF-токены — уникальный непредсказуемый токен в форме/заголовке, который проверяет сервер; злоумышленник его не знает.
- Проверка Origin/Referer заголовков.
- Не использовать GET для изменяющих операций.
CSRF против XSS
- XSS — выполнение чужого скрипта на странице.
- CSRF — подделка запроса через доверенные cookie, без выполнения скрипта на целевом сайте.
HttpOnly от CSRF не защищает (cookie всё равно шлётся) — нужен SameSite/токены.
Коротко для собеседования
CSRF — принуждение браузера жертвы отправить запрос к сайту, где она залогинена, используя её cookie. Защита: SameSite cookie (основная), CSRF-токены, проверка Origin, отказ от GET для изменений. HttpOnly от CSRF не спасает.
Подробнее: MDN — CSRF