Почему бы не хранить JWT в глобальной переменной? - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь понять последствия для безопасности хранения jwt в локальном хранилище (подвержено xss) против cookie (подвержено csrf).Я хотел бы понять последствия для безопасности, если я сохраню токен jwt в состоянии моего приложения во внешнем интерфейсе, как в магазине с резервированием.

РЕДАКТИРОВАТЬ:

Я попытался узнать больше охранение токенов.Кажется, что все статьи и ответы фактически начинают обсуждение после того, как установлено, что есть два способа сделать это: куки или хранение в браузере.Как этот вопрос: Где хранить JWT в браузере?Как защитить от CSRF? Как эти посты: https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage https://auth0.com/docs/security/store-tokens

Я понимаю смысл большинства из них, но я пытаюсь явно обсудить вариант глобальной переменной.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

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

Если вы не можетегарантируйте, что JWT будет безопасным, не используйте глобальные переменные, предпочитайте использовать инкапсуляцию следующим образом:

(function() {
  // Retrieve the JWT from somewhere
  var jwt = "mockjwt";

  //All of the code that needs the JWT goes here
  console.log('Safe code:', jwt);

  
})();

// Evil code, either:
// - Injected through a vulnerability of your website (e.g: eval misuse,
//   WYSIWYG editor vulnerable to script tag injection, etc...)
// - Injected because your user got fooled by some "copy/paste this code in the F12 tab
//   of your browser, and you'll unlock a secret functionality"
// - Untrusted <script> tag that you added to your website

console.log('Evil code:', jwt);  //Fails because the JWT is scoped to the anonymous
                                 //function and is not accessible from anywhere outside
                                 //the function.
0 голосов
/ 01 марта 2019

Насколько я понимаю, хранение JWT в локальном хранилище / кэше браузера - это больше о сохранении токена (авторизации пользователя) в сеансах браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...