Хранятся ли токены Anti-CSRF на стороне клиента, на стороне сервера или на обоих? - PullRequest
0 голосов
/ 12 октября 2018

Я создаю сайт React Js с бэкэндом Node.js.Я пытался выяснить реализацию аутентификации пользователя, чтобы предотвратить CSRF-атаки, однако я действительно не понимаю, где хранить токены Anti-CSRF.

Мой мыслительный процесс безопасной реализации выглядит следующим образом ...

  1. Пользователь отправляет запрос на вход с учетными данными.
  2. Учетные данные аутентифицируются.
  3. Сервер создает сеанс.
  4. Сервер создает JWT для использования в качестве токена Anti-CSRF.
  5. Сервер сохраняет JWT (токен Anti-CSRF) в хранилище сеанса.
  6. Сервер отправляетответ клиенту.
    • Ответ имеет заголовок для хранения идентификатора сеанса в файле cookie HttpOnly на стороне клиента.
    • Полезная нагрузка ответа включает JWT (токен Anti-CSRF).
  7. Клиент получает ответ.
  8. Идентификатор сеанса cookie HttpOnly хранится на стороне клиента.
  9. Клиент сохраняет JWT (токен Anti-CSRF) в localStorage.

IЕсли пользователю необходимо запросить информацию, клиент может отправить JWT (токен Anti-CSRF) через заголовок или полезную нагрузку, и идентификатор сеанса будет отправлен автоматически, поскольку он является файлом cookie.Затем сервер может проверить, существует ли JWT (токен Anti-CSRF) в хранилище сеанса.

Я знаю, что JWT (токен Anti-CSRF) нужно будет обновить в какой-то момент.

Моя путаница связана с хранением JWT (токена Anti-CSRF) на стороне клиента.,Я продолжаю читать, что он должен храниться только на сервере.Но если он хранится только на сервере, то, похоже, он вообще ничего не делает.

Я подумал об использовании как файлов cookie, так и localStorage, потому что кажется, что для запроса к серверу нужны и файл cookie HttpOnly, иЧто-то из localStorage, чтобы отправить обратно «авторизованный» ответ, злоумышленнику потребуется как успешно запустить сеанс, так и успешно осуществить атаку XSS, чтобы получить токен Anti-CSRF.

Я только начал изучать CSRF и XSSнедавно, так что я могу быть совершенно неправ, и в моей реализации может быть огромный недостаток, который я пропускаю.Но мой главный вопрос ... не нужно ли токены Anti-CSRF хранить на клиенте И на сервере?

1 Ответ

0 голосов
/ 04 января 2019

Их также называют "токенами CSRF".Когда клиент запрашивает форму (например, страницу входа в банк), сервер генерирует токены и передает их клиенту, а когда клиент заполняет форму, клиент передает токен CSRF вместе с заполненной формой.Сервер проверяет значение токена и, если оно совпадает, запрос выполняется.Токены CSRF хранятся на стороне сервера в шаблоне токена синхронизатора.

...