Подтвердить что ты не робот

Должен ли JWT храниться в localStorage или cookie?

В целях обеспечения безопасности REST API с использованием JWT, согласно некоторым материалам (например, и question), JWT может быть сохранен в localStorage или Cookies. Основываясь на моем понимании:

  • localStorage подвергается XSS и обычно не рекомендуется хранить в нем какую-либо конфиденциальную информацию.
  • С Cookies мы можем применить флаг "httpOnly", который уменьшает риск XSS. Однако, если мы хотим прочитать JWT из Cookies на бэкэнд, мы затем подвергаемся CSRF.

Таким образом, исходя из вышеуказанной предпосылки - будет лучше, если мы сохраним JWT в Cookies. При каждом запросе на сервер JWT будет считываться из файлов cookie и добавляться в заголовок авторизации с использованием схемы переноса. Затем сервер может проверить JWT в заголовке запроса (в отличие от чтения его из файлов cookie).

Правильно ли я понимаю? Если да, имеет ли вышеупомянутый подход какие-либо соображения безопасности? Или на самом деле мы можем просто уйти с использованием localStorage в первую очередь?

4b9b3361

Ответ 1

Мне нравится метод Double Submit Cookies XSRF, который упоминается в статье, которую @pkid169 сказал, но есть одна вещь, о которой статья не говорит вам. Вы по-прежнему не защищены от XSS, потому что то, что может сделать злоумышленник, - это ввести script, который читает ваш CSRF файл cookie (который не является HttpOnly), а затем делает запрос к одной из ваших конечных точек API, используя этот токен CSRF с автоматическим отправкой файла JWT.

Таким образом, на самом деле вы по-прежнему восприимчивы к XSS, это просто, что злоумышленник не может украсть ваш токен JWT для последующего использования, но он все равно может делать запросы от имени ваших пользователей с помощью XSS.

Сохраняете ли вы свой JWT в локальном хранилище или хранилище XSRF-токена не в cookie cookie, а с помощью XSS оба могут быть легко схвачены. Даже ваш JWT в HttpOnly cookie может быть захвачен передовой атакой XSS.

Таким образом, помимо метода Double Submit Cookies, вы всегда должны следовать рекомендациям XSS, включая экранирование содержимого. Это означает удаление любого исполняемого кода, который заставит браузер делать то, что вы не хотите. Обычно это означает удаление // <! [CDATA [тегов и атрибутов HTML, которые вызывают JavaScript для оценки.

Ответ 2

Своевременное сообщение из Stormpath в значительной степени определило мои вопросы и ответило на мой вопрос.

TL; DR

Храните JWT в файлах cookie, затем либо передайте JWT в заголовке авторизации при каждом запросе, как я упоминал, либо, как предлагает статья, полагаться на бэкэнд для предотвращения CSRF (например, используя xsrfToken в случае Angular).