CSRF (межсайтовая подделка запросов)

Множество веб-приложений подвержено CSRF-уязвимости. Рассмотренный здесь пример очень упрощен, но это как раз и помогает понять основы данной атаки.

Например, рассмотрим пример, приведенный в википедии

Например, пользователь Алиса может просматривать форум, где другой пользователь, Боб, разместил сообщение. Пусть Боб создал тег , в котором в качестве источника картинки указал URL, при переходе по которому выполняется действие на сайте банка Алисы, например:

Боб: Привет, Алиса! Посмотри, какой милый котик: <img src="http://bank.example.com/withdraw?account=Alice&amount=1000000&for=Bob">

Если банк Алисы хранит информацию об аутентификации Алисы в куки, и если куки ещё не истекли, при попытке загрузить картинку браузер Алисы отправит куки в запросе на перевод денег на счёт Боба, чем подтвердит аутентификацию Алисы. Таким образом, транзакция будет успешно завершена, хотя её подтверждение произойдет без ведома Алисы.

Конечно, такого рода атаки сейчас практически отсутствуют, ибо даже при подобных GET-запросах используют токены. Чтобы защититься при отправки POST-запросов, используют идентификатор сессии пользователя, передающийся дополнительным скрытым полем формы.

Данную CSRF-уязвимость можно использовать не только для кражи данных, но и для выполнения кода от имени другого пользователя. Например, на том же самом форуме можно подобным образом отправлять комментарий от имени пользователя (конечно, если не стоит CSRF-защита). Необходимо просто подделать форму отправки сообщений, заполнить поля необходимым образом (например, в поле комментария, написать что необходимо) и позволить пользователю нажать на кнопку. Форма отправит данные на сервер, и комментарий разместится. При этом пользователю совершенно не обязательно знать, что эта форма существует. Ее можно как скрыть средствами CSS, так и разместить в прозрачном фрейме поверх другой страницы на сайте, к которому у нас есть доступ.