CSRF-атака или межсайтовая подделка запроса
В CSRF-атаке участвует вредоносный веб-ресурс, который вклинивается между браузером пользователя и сайтом, где пользователь уже авторизован. В результате браузер выполняет задуманное мошенником действие — например, списание денег с банковской карты. Иными словами, при межсайтовой подделке запроса веб-ресурс злоумышленника выдаёт себя за пользователя и отсылает на сервер свои команды.
Как это работает
Пользователь заходит на мошенническую веб-страницу, с которой от его лица отправляется команда на другой сервер. Браузер помнит логин и пароль посетителя этого сайта, поэтому операция осуществляется без его ведома. Мошенники специально отправляют такие команды, которые не требуют подтверждения со стороны пользователя, либо же подделывают его ответ при помощи скрипта.
Чтобы заставить пользователя зайти на вредоносный сайт, злоумышленники могут прислать ссылку на него в письме на электронную почту. А чтобы он не выглядела подозрительно, её внешний вид меняют при помощи сокращателя ссылок.
Мошенники могут с помощью CSRF-атаки проводить перевод денег с карт, запрашивать сброс пароля к учетной записи, восстанавливать доступ к сервисам. Браузеры не могут распознать обман, потому что они обращаются к файлам cookie и считают ложный запрос подлинным — для них это тот же пользователь. Поэтому межсайтовой атаке подвержены любые веб-ресурсы, которые используют куки-файлы, браузерную аутентификацию, клиентские сертификаты авторизации.
Способы защиты от CSRF-атак
Есть общие меры предосторожности: время от времени удалять куки-файлы и после посещения сайтов выходить из учётных записей. Многие сайты стараются обезопасить пользователей с помощью запроса дополнительных подтверждений — кода или капчи.
Токены
Сервер формирует случайное число для каждого запроса. Оно остаётся активным недолгое время и может использоваться только один раз. Токен устойчив к подбору. Сервер передаёт его пользователю через API, и если посетитель сайта хочет произвести какие-то изменения, он должен отправить токен вместе с запросом. Мошенник не может провести межсайтовую атаку, так как у него нет этого сгенерированного сервером числа.
Есть двойные токены для обеспечения более высокого уровня безопасности. Один из них сохраняется в куки-файлах, а второй — в параметре запроса. Они должны совпасть при отправке команды. Злоумышленник не может изменить куки в браузере пользователя, и у него меньше шансов провести атаку.
Защита через заголовки Content-Type и Referer
Когда пользователь заходит на сайт, заголовки HTTP помогают браузеру понять, как с ним работать. Если включить такую защиту, то в первом случае пользователю нужно будет отправить команду с определённым значением заголовка Content-Type, а во втором — заголовка Referer. Браузер не сможет отправить эти заголовки, если они не совпадут с данными бэкенда.
SameSite Cookies
В некоторых браузерах есть защита от межсайтовых атак благодаря установке атрибута samesite в куки-файлы. Браузер не передаёт на сервер cookies, если команда поступает со стороннего домена.