Одной из широко используемых альтернатив 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.
Поэтому крайне важно выявить любые другие лазейки, которые могут существовать в системе, и также защитить их.