Шаблон двойной отправки файлов cookie

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

В этом сообщении блога обсуждается шаблон Double Submit Cookie для предотвращения атаки CSRF.

Что это значит?

Двойная отправка файлов cookie определяется как отправка случайного значения как в файле cookie, так и в качестве параметра запроса, при этом сервер проверяет, равны ли значение файла cookie и значение запроса.

Как это работает?

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

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

В случае этого метода смягчения последствий работа клиента очень проста; просто извлеките файл cookie CSRF из ответа и добавьте его в специальный заголовок ко всем запросам.

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

Исходный код приложения: Ссылка на GitHub

Во-первых, вам необходимо авторизоваться в приложении, введя логин и пароль. Для приложения я жестко закодировал учетные данные как имя пользователя: admin и пароль: admin

См. также:  Сериализация методов объекта с использованием строк шаблона ES6 и eval

шаг 1: пользователь должен войти в приложение, используя учетные данные пользователя

Сообщение об ошибке будет отображаться, если пользователь введет неверные учетные данные следующим образом.

Шаг 2: Когда пользователь нажимает кнопку «Войти» после ввода действительных учетных данных, данные отправляются на сторону сервера (login.php) и аутентифицируют пользователя, запускают сеанс и устанавливают 2 файла cookie в веб-браузере клиента.

шаг 3: когда клиент отправил форму, он должен иметь скрытое поле для хранения токена CSRF.

Шаг 4: Затем давайте проверим server.php, который сравнивает встроенное значение CSRF и значение файла cookie CSRF.

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

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

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

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

Как мы можем сказать, что метод безопасен?

Файлы cookie отправляются автоматически с каждым запросом, независимо от того, был ли запрос инициирован исходным сайтом или сторонним сайтом. Вот почему одного файла cookie недостаточно, поскольку каждый запрос будет содержать его.

Но имея токен также в самом запросе, атакующий сайт больше не может генерировать действительные запросы, поскольку они не могут завладеть токеном пользователя.

Исходный код приложения: Ссылка на GitHub

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: