CSRF-атака заставляет аутентифицированного пользователя (жертву) отправлять поддельный HTTP-запрос, включая cookie-файл сеанса жертвы, уязвимому веб-приложению, что позволяет злоумышленнику заставить браузер жертвы сгенерировать запрос так, чтобы уязвимое приложение воспринимало как законные запросы от жертва.
Давайте разберемся с этими факторами с помощью простой диаграммы: агенты угроз, векторы атак, слабость в безопасности, техническое воздействие и влияние на бизнес.
пример
Вот классический пример CSRF —
Шаг 1. Допустим, уязвимое приложение отправляет запрос на изменение состояния в виде простого текста без какого-либо шифрования.
http://bankx.com/app?action=transferFund&amount=3500&destinationAccount=4673243243
Шаг 2. Теперь хакер создает запрос, который переводит деньги со счета жертвы на счет злоумышленника, встраивая запрос в изображение, которое хранится на различных сайтах, находящихся под контролем злоумышленника.
<img src = "http://bankx.com/app?action=transferFunds&amount=14000&destinationAccount=attackersAcct#" width = "0" height = "0" />
Руки вверх
Шаг 1 — Давайте выполним подделку CSRF, внедрив скрипт Java в изображение. Снимок проблемы указан ниже.
Шаг 2 — Теперь нам нужно смоделировать передачу в изображение 1×1 и заставить жертву нажать на нее.
Шаг 3 — После отправки сообщения оно отображается, как показано ниже.
Шаг 4 — Теперь, если жертва щелкает следующий URL-адрес, выполняется передача, которую можно найти, перехватив действие пользователя с помощью пакета burp. Мы можем увидеть перевод, заметив его в сообщении Get, как показано ниже —
Шаг 5 — Теперь при нажатии кнопки «Обновить» отображается отметка об окончании урока.
CSRF можно избежать, создав уникальный токен в скрытом поле, которое будет отправлено в теле HTTP-запроса, а не в URL-адресе, который более подвержен уязвимости.
Принуждение пользователя к повторной аутентификации или доказательство того, что они являются пользователями, для защиты CSRF. Например, CAPTCHA.