当前位置: 首页 > 知识库问答 >
问题:

为什么不将JWT存储在全局变量中?

朱鹏
2023-03-14

我试图理解将jwt存储在本地存储(倾向于xss)与cookie(倾向于csrf)的安全含义。我想了解如果我将jwt令牌存储在前端的应用状态中的安全性影响,就像在redux商店中一样。

编辑:

我试图了解有关存储代币的更多信息。似乎所有的文章和答案实际上都是在确定有两种方法可以做到这一点后开始讨论的,即cookie或浏览器存储。像这样一个相关的问题:在浏览器中的何处存储JWT?如何防范CSRF?像这些帖子:https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage https://auth0.com/docs/security/store-tokens

我理解其中大多数的要点,但我试图明确地讨论全局变量的选项。

共有2个答案

慕容劲
2023-03-14

根据我的理解,在浏览器本地存储/缓存中存储JWT更多的是通过浏览器会话持久化令牌(用户授权)。

裴昊阳
2023-03-14

如果将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.
 类似资料:
  • 问题内容: 我一直看到警告,不要在JavaScript中使用全局变量,但是似乎人们说这的唯一原因是因为阻塞了全局名称空间。我可以想象通过将所有变量放入一个大对象中来轻松解决此问题。现在的问题是:除了方便起见,还有其他原因不使用全局变量吗?它们是否涉及任何性能或兼容性问题? 问题答案: 它们使全局名称空间混乱,并且查找速度比局部变量慢。 首先,拥有许多全局变量始终是一件坏事,因为很容易忘记您在某个地

  • 问题内容: 我目前遇到一个问题,我有两个我需要调用的模块,它们需要能够修改相同的变量。 我决定创建一个名为的全局变量,并在其中存储所需的变量。 但是我一直在阅读,使用全局变量是一种不好的做法。为什么? 我仅创建一个变量,该变量不应与其他任何冲突,因为它是我的应用程序的名称。 问题答案: 几乎在所有编程语言中,全局变量都被视为反模式,因为它们使遵循和调试代码变得非常困难。 浏览代码时,您永远不知道哪

  • 问题内容: 目前,我正在使用一个大量的JavaScript,jQuery,Microsoft客户端JavaScript和其他库的旧网页。底线- 我无法从头开始重写整个页面,因为企业无法证明它的合理性。所以…就是这样。无论如何,我需要使用变量来污染(我确实没有尝试过)全局名称空间。我在考虑三个选项- 只需使用普通的JavaScript声明存储/检索它- 使用jQuery在DOM标签中存储/获取值-

  • 问题内容: 全局变量在Python中如何工作?我知道全局变量是有害的,我只是在做实验。 这在python中不起作用: 我收到一个错误: 我究竟做错了什么? 问题答案: 您需要声明: 在Python中, 您分配的 变量默认情况下成为局部变量。您需要使用将它们声明为全局变量。另一方面,您 引用但未分配的 变量不会自动成为局部变量。这些变量指的是封闭范围内最接近的变量。 Python 3.x引入了类似于

  • 问题内容: 我仍然是jQuery和ajax领域的新手,但是我有一个$ .ajax请求,执行GET来检索一些XML文件(〜6KB或更少),但是在用户花那个页面的时间内,XML内容应该不会/不会更改(此设计我无法更改,在我从其他地方读取XML文件时也无权更改它)。因此,我有一个全局变量将响应数据存储到该变量中,并且对该数据进行的所有后续查询都将在此变量上进行,因此不需要进行多个请求。 考虑到XML文件

  • 问题内容: 为什么全局变量是不好的?[closed] 问题答案: 这与Python无关。全局变量在任何编程语言中都是不好的。 但是,全局常量在概念上与全局变量并不相同。全局常数完全无害。只是在Python中没有强制性差异,只有约定是。 它们不好的原因是它们使函数具有隐藏的(非显而易见的,令人惊讶的,难以检测的)副作用,从而导致复杂性的增加,并有可能导致产生Spaghetti代码。 但是,即使在函数