Эта история о том, как использовать шаблон двойной отправки файлов cookie для предотвращения атаки CSRF.

Что такое CSRF-архив?

Подделка межсайтовых запросов (CSRF) — это уязвимость веб-безопасности, которая позволяет злоумышленникам заставить конечных пользователей выполнять нежелательные действия в веб-приложении, в котором они в настоящее время аутентифицированы. Злоумышленники могут менять пароли, осуществлять перевод средств с помощью CSRF-атаки. Иногда злоумышленники могут получить полный контроль над учетной записью пользователя, а также над данными веб-приложения.

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

Двойная отправка файлов cookie определяется для отправки случайного значения как в файле cookie, так и в качестве параметра запроса, затем сервер проверяет, равны ли значение файла cookie и значение запроса. Шаблон Double Submit Cookie может использоваться для предотвращения атаки CSRF.

Как шаблон файла cookie с двойной отправкой предотвращает атаку CSRF?

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

Как реализовать защиту от подделки межсайтовых запросов в веб-приложении с помощью шаблона файлов cookie с двойной отправкой?

Давайте посмотрим на пример проекта (ССЫЛКА НА GITHUB-НАЖМИТЕ ЗДЕСЬ)

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

2. Учетные данные пользователя отправляются методом POST. Если пользователь успешно аутентифицирован, сервер создаст уникальный идентификатор сеанса и значение токена CSRF.

3. Сервер хранит идентификатор сеанса. Затем разъедините ответы на соответствующее значение токена CSRF с телом ответа. после этого сгенерированное значение токена CSRF и идентификатор сеанса устанавливаются в виде файлов cookie в браузере.

4. Затем выполняется вызов ajax (самостоятельный вызов) для получения сохраненного токена CSRF.

5.Токен CSRF будет добавлен в скрытое поле.

6. Поле «Отправить запрос» реализовано методом POST. Когда пользователь обновляет какой-либо запрос и нажимает «обновить публикацию», запрос POST отправляется вместе с сгенерированным токеном CSRF и файлом cookie сеанса на сервер.

7. Сервер проверяет заголовок файла cookie для идентификатора сеанса и сравнивает его с токеном CSRF, который поставляется со скрытым полем. Если эти токены совпадают, сервер принимает запрос.

Безопасен ли этот метод?

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

Заключение

Шаблон cookie с двойной отправкой может использоваться как один из лучших методов предотвращения атак CSRF.

В другом своем рассказе я обсуждал другой метод под названием Synchronizer Token Pattern для предотвращения атаки CSRF.