Ранее я обсуждал Шаблон токенов синхронизатора и подделку межсайтовых запросов как одно из решений для атаки подделки межсайтовых запросов на веб-приложения.
В этом сообщении блога будет обсуждаться шаблон Double Submit Cookie для предотвращения атаки CSRF.
Двойная отправка шаблона cookie
Двойная отправка файлов cookie определяется как отправка случайного значения как в файле cookie, так и в качестве параметра запроса, при этом сервер проверяет, равны ли значение cookie и значение запроса.
Когда пользователь аутентифицируется на сайте, сайт должен сгенерировать (криптографически стойкое) псевдослучайное значение и установить его как файл cookie на машине пользователя отдельно от идентификатора сеанса. Серверу ни в коем случае не нужно сохранять это значение, поэтому этот шаблон также называется Stateless CSRF Defense.
Выполнение
Во-первых, вы должны войти в приложение, указав жестко заданные имя пользователя и пароль. Полномочия как,
имя пользователя: привет,
пароль: 1234
Эта форма входа в систему с использованием метода POST отправляет учетные данные пользователя. Если клиент успешно аутентифицирован, серверная сторона создает уникальный идентификатор сеанса и токен CSRF, но сервер сохраняет только идентификатор сеанса. Важно отметить, что в этой ситуации сервер не хранит токен CSRF.
После установки токена CSRF для файла cookie сохраненный токен CSRF назначит значение скрытого поля с помощью приведенного ниже JavaScript (вызов AJAX) при загрузке вкладки транзакции.
Проиллюстрируйте значение после того, как скрытое поле было установлено токеном.
Заявление будет выпущено клиентом, когда форма будет отправлена с внутренней стороны. Затем сервер проверяет детали формы и проверяет токен файла cookie CSRF с токеном файла cookie клиента CSRF.
Наконец, сообщение об успехе будет показано, если файл cookie подтвержден.
иначе это показывает недопустимое сообщение.
Приемы шаблона Double Submit Cookie, описанные в этой истории, заслуживают внимания в любом приложении, содержащем полезные данные.
Я разработал образец проекта Double submit cookie. Вы можете проверить исходный код здесь.