CSRF-атаки: как работают и как защитить своё приложение
Что такое CSRF
CSRF (Cross-Site Request Forgery) — атака, при которой злоумышленник заставляет авторизованного пользователя выполнить нежелательное действие на доверенном сайте. В отличие от XSS, CSRF не внедряет код — он использует легитимную сессию жертвы.
Классический пример: пользователь авторизован в онлайн-банке. Злоумышленник отправляет жертве email с картинкой <img src='https://bank.com/transfer?to=attacker&amount=100000'>. Браузер автоматически отправляет запрос с cookie пользователя, и перевод выполняется.
Методы защиты от CSRF
CSRF-токены — главный метод защиты. Сервер генерирует уникальный токен для каждой сессии или формы и проверяет его при получении запроса. Злоумышленник не может узнать токен, так как Same-Origin Policy блокирует чтение ответов с других доменов.
SameSite cookie — современный атрибут cookie, который контролирует, отправляются ли cookie при cross-origin запросах. Значение Strict или Lax эффективно блокирует большинство CSRF-атак без изменений в коде приложения.
Проверка Origin и Referer — сервер может проверять заголовки Origin и Referer входящих запросов. Если запрос пришёл с постороннего домена — отклонять его. Это дополнительный уровень защиты.
Double Submit Cookie — альтернатива серверным токенам. Токен отправляется одновременно в cookie и в параметре запроса. Сервер сравнивает их значения. Метод не требует хранения состояния на сервере.