【问题标题】:is saving jwt in vuex state a security issue?在 vuex 状态下保存 jwt 是一个安全问题吗?
【发布时间】:2020-04-10 22:28:48
【问题描述】:

简而言之,这是我的服务器渲染应用程序的屏幕截图: 在给定图像中视图源的 倒数第四行 中,您可以看到令牌。这是因为我必须将它保存在 vuex 状态。

那么这是最佳实践吗?它甚至安全吗?如果用户打开一个恶意网站,该网站的所有者在他自己的页面中放置了 iframe 或其他东西来调用我的这个网站并从这里复制 jwt 怎么办。那么他可以拥有对我的应用程序的管理员访问权限吗?不知道 iframe 是否可行,但有人知道其他机制吗?

你有什么建议?

【问题讨论】:

    标签: security vue.js jwt


    【解决方案1】:

    只是内存中的一个JS变量。

    如果另一个框架可以访问此变量,那么该框架也可以调用您页面上的任何方法或按钮。因此,他们甚至可以调用“withdraw()”方法或单击提交按钮,而不是窃取您的令牌。

    所以,关键是如果您的应用程序的登录会话在另一个页面内的 iframe 中可用,那么无论使用 Vue 还是 Vuex,它都非常糟糕。

    跨域资源共享 (CORS) 限制可以防止这种情况。因此,只有在您专门将服务器设置设置为不太安全时,这种情况才有可能发生。

    也就是说,如果您将其保存在 cookie 中,并避免在变量中使用它,则效果会更好。但是,你必须看看 cookie 的其他问题。

    更新:

    1. Chrome 有许多安全检查来防止其他 URL(其他域)将您的页面加载到 IFrame 中。只有类似的域才能将您的页面加载到 IFrame 中。因此,另一个页面很难在 IFrame 中加载您的页面,然后访问您的 JS 变量。仅当您将服务器设置保持在低安全模式时才有可能。如果您的服务器 CORS 设置正常,那么您就可以了。
    2. 只要您使用 HTTPS,服务器端呈现的内容也不是问题。那是因为 HTTPS 使内容保密。因此,只有服务器和预期的接收者才能看到传输中的内容(您在屏幕截图中显示的整个内容)。

    更新 #2:

    • 在 Vuex 中保持 JWT 只会在页面刷新之前保持活动状态,因此每次用户都必须登录。

    • Vuex 的替代方案是将 JWT 设置为在 HTTP 响应中具有短暂到期的 cookie(使用 HttpOnly,它将使 JS 无法访问 cookie)。

    • 1234563
    • Cookies 也相当安全...它们将与请求一起自动发送,但只发送到同一个域,您可以设置一个标志来强制浏览器仅通过 HTTPS 连接发送此 cookie。不过要注意 CSRF。

    • 本地存储也相当安全。脚本保存的数据也仅可用于从同一域加载的脚本。注意 XSS,这是我们已经提到的 Vuex。此外,它不会自动过期。

    有关此主题的更多信息:

    1. https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage
    2. https://www.youtube.com/watch?v=13QPmRuhbhU&list=PLAO1W_Ggxtx305USJbELM6vZOeF8aNsLq&index=34&t=0s
    3. https://www.youtube.com/watch?v=c6mqdsfWdmE&list=PLAO1W_Ggxtx305USJbELM6vZOeF8aNsLq&index=32&t=0s

    【讨论】:

    • 我一直在寻找可以利用此令牌的一些情况,如果它真的很关键,我将完全避免它。我最初的问题是这个令牌或任何状态变量是否可以被利用?这是一个安全问题吗?尤其是在服务器渲染的应用程序中。
    • @RameshPareek 我为答案添加了一些更新。
    • 好的。这解决了这个问题。但是,如果您能添加几行来回答问题的第二部分“是否还有其他机制......?”,我将不胜感激。
    猜你喜欢
    • 2020-06-24
    • 2019-12-23
    • 1970-01-01
    • 2017-03-27
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多