Эта история о том, как использовать шаблон двойной отправки файлов cookie для предотвращения атаки CSRF.
Что такое CSRF-архив?
Подделка межсайтовых запросов (CSRF) — это уязвимость веб-безопасности, которая позволяет злоумышленникам заставить конечных пользователей выполнять нежелательные действия в веб-приложении, в котором они в настоящее время аутентифицированы. Злоумышленники могут менять пароли, осуществлять перевод средств с помощью CSRF-атаки. Иногда злоумышленники могут получить полный контроль над учетной записью пользователя, а также над данными веб-приложения.
Что такое шаблон cookie с двойной отправкой?
Двойная отправка файлов cookie определяется для отправки случайного значения как в файле cookie, так и в качестве параметра запроса, затем сервер проверяет, равны ли значение файла cookie и значение запроса. Шаблон Double Submit Cookie может использоваться для предотвращения атаки CSRF.
Как шаблон файла cookie с двойной отправкой предотвращает атаку CSRF?
- Когда пользователь аутентифицируется на сайте, сайт генерирует идентификатор сеанса и установленный файл cookie в браузере.
- Между тем, он генерирует сильное случайное значение, называемое токеном CSRF, для сеанса и устанавливает его как файл cookie в браузерах пользователя отдельно от идентификатора сеанса.
- Всякий раз, когда браузер запрашивает, это случайное значение включается как скрытое значение формы в каждый этот запрос. Поэтому злоумышленники не могут прочитать какие-либо данные или измененные значения файлов cookie, отправленные сервером.
Как реализовать защиту от подделки межсайтовых запросов в веб-приложении с помощью шаблона файлов cookie с двойной отправкой?
Давайте посмотрим на пример проекта (ССЫЛКА НА GITHUB-НАЖМИТЕ ЗДЕСЬ)
- Войдите в веб-приложение, введя имя пользователя и пароль. Для демонстрации можно использовать жестко заданные учетные данные. (имя пользователя: 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.