Существует несколько методов, которые при совместном использовании обеспечивают достаточную защиту CSRF.
Уникальный токен
Один токен, специфичный для сеанса, подходит для большинстваПриложения.Просто убедитесь, что на вашем сайте нет XSS-уязвимостей, в противном случае любой используемый вами метод токена является пустой тратой.
Вызов AJAX для регенерации токена - плохая идея.Кто будет охранять охрану?Если сам вызов AJAX уязвим для CSRF, он как бы побеждает цель.Несколько жетонов с AJAX вообще плохая идея.Это вынуждает вас сериализовать ваши запросы, т.е. только один AJAX-запрос разрешен за один раз.Если вы готовы жить с этим ограничением, вы, возможно, можете использовать токен для второго вызова AJAX в ответ на первый запрос.
Лично я считаю, что лучше провести повторную аутентификацию пользователя для критических транзакций,и защитите оставшиеся транзакции с помощью специфичного для сеанса токена.
Настраиваемый заголовок HTTP
Вы можете добавить настраиваемый заголовок HTTP к каждому из ваших запросов и проверить его наличие.на стороне сервера.Фактический ключ / значение не должен быть секретным, сервер просто должен убедиться, что он существует во входящем запросе.
Этот подход достаточно хорош для защиты CSRF в более новых версиях браузеров, однако его возможнослишком обойти это, если у вашего пользователя есть более старая версия Flash Player.
Проверка Referrer
Проверка заголовка Referrer также хороша для защиты CSRF в новых браузерах.Подделать этот заголовок невозможно, хотя это было возможно в более старых версиях Flash.Таким образом, хотя он и не защищен от ошибок, он все же добавляет некоторую защиту.
Решающая капча
Заставление пользователя выполнить проверку капчи также эффективно против CSRF.Это чертовски неудобно, но довольно эффективно.Это, пожалуй, единственная защита CSRF, которая работает, даже если у вас есть уязвимости XSS.
Сводка
- Используйте токен на основе сеанса, но повторно аутентифицируйтесь для высокогозначение транзакции
- Добавьте пользовательский заголовок http, а также проверьте наличие реферера.Оба сами по себе не защищены от дурака, но не причиняют вреда