Предотвращение CSRF-атак с помощью шаблона Double Submit Cookie

Этот метод является лучшим способом, который мы можем использовать для смягчения атак CSRF в случае, если сохранение токена CSRF в сеансе в методе шаблона токена синхронизатора проблематично.

Ознакомьтесь с блогом, в котором объясняются шаблоны токенов синхронизатора —



Что такое шаблон cookie с двойной отправкой?

В Double Submit Cookie мы отправляем случайное значение двумя способами одновременно:

  1. Как печенье
  2. Как параметр запроса

Сервер проверяет, совпадают ли значение cookie и значение запроса.

Следуя этому процессу, злоумышленник не может выполнить CSRF из-за того, что cookie всегда формируется браузером.

Пример двойной отправки файлов cookie

Ниже приведено веб-приложение, использующее шаблон Double Submit Cookie с использованием PHP и JavaScript.

Ссылка на GitHub — https://github.com/Shanith98/SSSq2

  1. Войти

Войдите в систему, используя учетные данные — имя пользователя: shaith & пароль: 123

Форма входа отправляет учетные данные пользователя с использованием метода POST.

Уникальный идентификатор сеанса и токен CSRF будут созданы на стороне сервера после входа пользователя в систему. Токен CSRF не хранится на стороне сервера.

Затем сервер ответит соответствующим токеном CSRF и телом ответа.

После этого браузер устанавливает идентификатор сеанса, и сервер отвечает как файл cookie. Поскольку JavaScript должен иметь доступ к файлу cookie токена csrf для добавления в скрытое поле в запросе POST, для флага только http следует установить значение «false».

После этого пользователь может получить доступ к странице «обновить сообщение». На этой странице есть вызов AJAX для получения сохраненного токена CSRF из файлов cookie браузера.

Затем соответствующий токен CSRF добавляется в скрытое поле.

Когда пользователь нажимает кнопку обновления, отправляется запрос POST. Потом,

  1. Сервер проверяет заголовок файла cookie для идентификатора сеанса.
  2. Сервер сравнивает токен CSRF из тела запроса с токеном CSRF файла cookie заголовка.

Сервер принимает запрос, если эти токены совпадают,

Сервер отклоняет запрос, если токены не совпадают,