CSRF (англ. Сross Site Request Forgery — «Подделка межсайтовых запросов», также известен как XSRF) — вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника). Для осуществления данной атаки, жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, который не может быть проигнорирован или подделан атакующим скриптом.
Данный тип атак, вопреки распространённому заблуждению, появился достаточно давно: первые теоретические рассуждения появились в 1988 году[1], а первые уязвимости были обнаружены в 2000 году.
Одно из применений CSRF — эксплуатация пассивных XSS, обнаруженных на другом сервере. Так же возможны отправка писем (спам) от лица жертвы и изменение каких-либо настроек учётных записей на других сайтах (например, секретного вопроса для восстановления пароля).
Содержание |
Наиболее простым для понимания способом защиты от данного типа атак, является механизм, когда веб-сайты должны требовать подтверждения большинства действий пользователя и проверять поле HTTP_REFERER, если оно указано в запросе.
Другим распространённым способом защиты является механизм, когда с каждой сессией пользователя ассоциируется дополнительный секретный ключ, предназначенный для выполнения POST-запросов. Пользователь посылает этот ключ внутри тела каждого POST-запроса, при выполнении каких-либо действий, а сервер проверяет этот ключ. Преимуществом данного механизма является отсутствие необходимости осуществлять парсинг поля HTTP_REFERER, а значит и нет необходимости учитывать множество нюансов возможных вариантов присутствия или отсутствия различных элементов этого поля. Недостатком же являются: требование возможности организации пользовательских сессий и требование динамической генерации HTML-кода активных страниц сайта.
Подделка межсайтовых запросов.