Я скомпилировал блок-схему, чтобы помочь мне понять, как защитить от CSRF в моем приложении AJAX. В прошлом я успешно использовал предотвращение CSRF на более стандартных веб-формах, но это первый раз, когда он действительно необходим для работы в AJAX.
Я предполагаю, что мне хотелось бы получить какие-либо отзывы о том, работает ли логика или нет, потому что это будет приложение с высоким уровнем безопасности, которое должно быть отключено по истечении не более 30 секунд, и токен должен быть разным для каждого отдельного запроса, а не для вся сессия
Это нормально, если ваше значение токена генерируется CSPRNG со 128 битами энтропии. Нет необходимости хэшировать значение на стороне клиента, хотя вы могли бы хэшировать его, используя SHA-2 для хранения на стороне сервера, чтобы не допустить компрометации существующих пользовательских сеансов.
Также я предполагаю, что ваш токен CSRF отличается от токена аутентификации — рекомендуется, чтобы он был отдельным, так как вы не хотите манипулировать и обязательно передавать токен аутентификации.
Для дальнейшего повышения безопасности вы можете проверить и установить пользовательский заголовок AJAX, например: X-Requested-With
потому что это не может быть передано кросс-доменом браузера без включенного CORS.
Вы также можете включить свой безопасный токен в этот заголовок. Смотрите этот ответ для деталей.
Других решений пока нет …