CSRF Token — это уникальный способ защититься от CSRF-атак, которые достаточно распространены в веб-приложениях. Вообще, веб — это среда, где очень много различных видов атак, от которых нужно защищаться.
Любая атака злоумышленников нацелена на получение собственной выгоды для атакующего и на нанесение ущерба атакуемого объекта. В результате любой атаки злоумышленник незаконно овладевает какой-то информацией, которую может использовать в собственных целях. Это может быть личная конфиденциальная информация пользователей:
платежные реквизиты;
личные сообщения;
доступы к разным аккаунтам;
и др.
Чтобы завладеть такой информацией, злоумышленники могут использовать разные способы, одним из которых является CSRF.
Что такое CSRF-атака?
CSRF — это «cross-site request forgery» и переводится как «межсайтовая подделка запросов». Этот вид атаки строится на «пробелах в безопасности» HTTP-запросов. Например, пользователь ничего не подозревает и заходит на какой-то сайт, который создал злоумышленник. Пока пользователь находится на зловредном сайте, злоумышленник отправляет от его лица запросы на сервера других веб-ресурсов. Например, хакер может от лица этого пользователя перевести деньги на собственный счет с пользовательского онлайн-банка. Самое главное, чтобы в этот момент пользователь был аутентифицирован на атакуемом ресурсе и там не требовалось подтверждение проводимых операций. К примеру, пользователь осуществлял оплату в интернет-банке, страница интернет-банка осталась открытой, а пользователь перешел на сайт злоумышленника.
Конечно, с интернет-банком такая процедура может не пройти, так как большинство банков требуют подтверждение финансовых операций, но в других случаях такой способ отлично работает на хакеров.
То есть CSRF — это способ провести операцию на уязвимом сайте от имени атакуемого пользователя. С помощью CSRF хакер может:
изменить пароль;
восстановить пароль;
поменять номер телефона на собственный;
поменять электронную почту на собственную;
добавить пользователя в аккаунт;
что-либо оплатить;
и др.
CSRF-атаки доступны по простой причине. Браузер во время сессии не способен точно определить кто выполняет некоторые действия: пользователь или программа. Например:
кто нажал на кнопку;
кто перешел по ссылке;
кто написал;
и др.
Эту проблему с безопасностью уже очень давно используют хакеры, но, благо, от нее можно защититься при помощи CSRF-токена.
CSRF-token — что это?
CSRF-token — это самый эффективный способ защититься от CSRF-атаки. Причем он не только эффективный, но и очень простой. Суть его в том, что сервер формирует случайный набор байт и отправляет их браузеру клиента. Набор байт — это и есть токен. Потом, когда браузер отправляет запрос серверу, происходит проверка, возвращает ли обратно браузер CSRF-token. Если токен, который генерировал сервер совпадает с тем, который вернул браузер, тогда все хорошо и сессия продолжается.
CSRF-token обычно защищает только небезопасные HTTP-запросы, например:
POST;
PUT;
DELETE;
PATCH.
Безопасные методы HTTP-запросов нет смысла дополнительно защищать токеном.
К CSRF-token применяются следующие требования:
должен быть уникальным для каждой отдельной операции;
должен действовать единоразово;
обладает размером, который обеспечивает ему устойчивость к подбору;
генерируется специальным криптографическим генератором случайных чисел;
имеет ограничение по времени жизни.
Виды CSRF-токенов
CSRF-token может генерироваться и использоваться тремя способами:
Synchronizer Tokens. Это самый простой и распространенный способ использования CSRF-токена. В этом случае токен генерируется сервером и передается браузеру, при этом «копия» токена сохраняется на сервере. Потом происходит сверка токена браузера и токена, который сохранен на сервере. Когда сессия между браузером и сервером обновляется, тогда обновляется и CSRF-token.
Double Submit Cookie. В таком методе токен не хранится на сервере, а передается браузеру в двух экземплярах: в куках и в каком-то параметре ответа. При первом запросе к серверу, сервер формирует токен. Потом сервер передает его обратно браузеру, но в двух местах: в куках и еще в каком-то месте. При следующем обращении к серверу, у браузера проверяется наличие и идентичность токенов в обоих местах.
Encrypted Token. В этом случае в качестве токена является конкретная информация о клиенте, но зашифрованная специальным ключом. То есть при первом обращении к серверу из какой-то информации о браузере генерируется токен и помещается в какой-то параметр ответа. При последующих обращениях браузер должен вернуть токен. Токен расшифровывается и информация из токена должна совпасть с информацией о браузере.
Заключение
CSRF-token — это рабочий способ защититься от CSRF-атак. Даже самый простой способ генерации CSRF-токена обеспечивает надежную защиту. А защитой, как известно, не нужно пренебрегать.
Другое