Необходимо ли обновлять токен CSRF в токене JWT для каждого запроса / ответа? - PullRequest
0 голосов
/ 19 февраля 2019

Я разрабатываю веб-приложение, используя symfony и токен JWT для аутентификации.Для предотвращения XSS токен JWT хранится в файлах cookie с атрибутом HttpOnly.А для предотвращения CSRF я использовал случайный токен csrf.Этот токен хранится в cookie и токене JWT (в зашифрованном виде).Я хочу знать, нужно ли обновлять токен csrf в каждом ответе?Какова лучшая реализация?

Вот мои настройки в деталях:

  • У нас есть одностраничное приложение.Большинство запросов будет отправлено с использованием ajax.
  • Пользователь аутентифицируется с помощью POST.
  • При успешной аутентификации сервер сгенерирует случайный токен csrf, а затем сохранит его в файлах cookie (HttpOnly) и внутри полезной нагрузки JWT.Перед сохранением в полезной нагрузке JWT токен csrf будет зашифрован.
  • После того, как токен JWT закодирован, он будет сохранен в файлах cookie (HttpOnly)
  • Пользовательский запрос Evertime для доступа к другой странице,сервер будет проверять токен csrf в cookie-токене и JWT-маркере при декодировании токена JWT.
  • LocalStorage не используется, поскольку он доступен через javascript

1 Ответ

0 голосов
/ 19 февраля 2019

Как правило, нет необходимости обновлять токен CSRF при каждом запросе.

НО давайте посмотрим, что происходит в ваших настройках:

  • вы сохраняете свой JWT, а также токен CSRF вcookie,
  • вы посещаете вредоносный веб-сайт, который вызывает вредоносный запрос с вредоносными данными на ваш сайт,
  • ваш браузер присоединяет cookie к этому запросу с помощью JWT + CSRF,
  • yourбезопасность нарушена.

Таким образом, вы не должны помещать токен CSRF в cookie, потому что это бесполезно, продлеваете ли вы его или нет.

Если вы используете «одностраничное приложение», было бы лучше передать JWT в заголовок Authorization.Это делает CSRF-атаку невозможной (остерегайтесь других угроз).

Если вы используете «классическое веб-приложение», было бы лучше использовать «классические» токены CSRF и «классические» идентификаторы сеанса.

...