Предотвращение CSRF-атак с помощью шаблона Double Submit Cookie
Этот метод является лучшим способом, который мы можем использовать для смягчения атак CSRF в случае, если сохранение токена CSRF в сеансе в методе шаблона токена синхронизатора проблематично.
Ознакомьтесь с блогом, в котором объясняются шаблоны токенов синхронизатора —
Что такое шаблон cookie с двойной отправкой?
В Double Submit Cookie мы отправляем случайное значение двумя способами одновременно:
- Как печенье
- Как параметр запроса
Сервер проверяет, совпадают ли значение cookie и значение запроса.
Следуя этому процессу, злоумышленник не может выполнить CSRF из-за того, что cookie всегда формируется браузером.
Пример двойной отправки файлов cookie
Ниже приведено веб-приложение, использующее шаблон Double Submit Cookie с использованием PHP и JavaScript.
Ссылка на GitHub — https://github.com/Shanith98/SSSq2
- Войти
Войдите в систему, используя учетные данные — имя пользователя: shaith & пароль: 123
Форма входа отправляет учетные данные пользователя с использованием метода POST.
Уникальный идентификатор сеанса и токен CSRF будут созданы на стороне сервера после входа пользователя в систему. Токен CSRF не хранится на стороне сервера.
Затем сервер ответит соответствующим токеном CSRF и телом ответа.
После этого браузер устанавливает идентификатор сеанса, и сервер отвечает как файл cookie. Поскольку JavaScript должен иметь доступ к файлу cookie токена csrf для добавления в скрытое поле в запросе POST, для флага только http следует установить значение «false».
После этого пользователь может получить доступ к странице «обновить сообщение». На этой странице есть вызов AJAX для получения сохраненного токена CSRF из файлов cookie браузера.
Затем соответствующий токен CSRF добавляется в скрытое поле.
Когда пользователь нажимает кнопку обновления, отправляется запрос POST. Потом,
- Сервер проверяет заголовок файла cookie для идентификатора сеанса.
- Сервер сравнивает токен CSRF из тела запроса с токеном CSRF файла cookie заголовка.
Сервер принимает запрос, если эти токены совпадают,
Сервер отклоняет запрос, если токены не совпадают,