Одной из широко используемых альтернатив Synchronizer Token Pattern для защиты от подделки межсайтовых запросов является файл cookie с двойной отправкой.

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

Обзор

Когда пользователь входит в систему, создается сеанс, и идентификатор сеанса устанавливается в виде файла cookie, наряду с другим файлом cookie, содержащим токен CSRF.

Затем значение токена будет извлечено из файла cookie и помещено в скрытое поле ввода в HTML и будет использоваться для проверки отправленных форм путем сравнения данных POST с фактическими данными файла cookie.

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

Ниже приведена реализация файла cookie двойной отправки в веб-приложении. (Исходный код — GitHub)

Пояснение к Кодексу

Основная программа очень похожа на предыдущий пример, используемый в шаблоне токена синхронизатора. (Подробнее об этом здесь)

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

Функция document.cookie.match вернет файл cookie с именем «csrf». И если этот файл cookie соответствует файлу cookie[2], он передается в элемент с идентификатором «csrf», который является скрытым входным полем.

Наконец, в process.php данные POST будут сравниваться с данными cookie, как показано ниже. Если он совпадает, сеанс действителен, и запрошенная задача будет выполнена.

После завершения обязательно очистите файл cookie csrf.

Даже после внедрения защиты от двойной отправки файлов cookie в веб-приложение оно все еще может быть подвержено атакам CSRF из-за;

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

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