【问题标题】:Is local storage the best way to store JWT token on client side? ( Assuming best practices are in place for preventing XSS )本地存储是在客户端存储 JWT 令牌的最佳方式吗? (假设有预防 XSS 的最佳实践)
【发布时间】:2021-09-20 18:31:48
【问题描述】:

假设您正在采取必要的措施来防止 XSS,例如输入验证和输入清理,而且您对 XSS 非常小心,因此您每天进行代码审查以检查恶意代码; 在这种情况下,与将 JWT 令牌存储在 cookie 或仅 http cookie 中相比,将 JWT 令牌存储在浏览器本地存储中是最安全的吗?

为了更详细地描述这一点,假设 JWT 访问令牌存在于 REACT APP 中的 redux 存储中。该应用程序会在 1 小时不活动后自动注销用户。您将令牌作为全局状态提供。

经过身份验证的用户的访问令牌仅将他们保存在站点的授权部分,他们不能使用它从后端检索任何内容。

注意:如果您不通过日常代码审查来防止 XSS,那么您的应用程序中的任何内容都不是安全的。

【问题讨论】:

  • 为了有效地预防 XSS,请考虑 CSP 内容安全政策以及代码审查。

标签: api jwt token


【解决方案1】:

如果您询问将 JWT 存储在本地存储中是否会使它们或多或少安全,一般的答案是这无关紧要,因为 JWT 是防篡改的,任何修改它们的尝试都会被立即检测到发布它们的服务器。在保护 JWT 中包含的任何可见数据方面,将它们存储在本地存储中会增加窥探者看到这些数据的机会。如果这是一个问题,那么考虑加密它们。

【讨论】:

  • 非常感谢您的回答,这是我真正的想法。如果您不介意,另一个问题.. 加密令牌有什么意义,那里有多个免费的哈希分析器。人们甚至可以自己编写代码。假设我使用 MD5 或 MD4 来加密密钥。聪明到知道如何破解的人会知道如何解密这些密钥?
  • 您上面的问题可以回答您评论中的问题。仅仅因为 JWT 不能被篡改并不意味着它们的内容不能在客户端上看到。如果您不想冒险有人入侵您的本地存储并查看用户名等内容,那么加密 JWT 是一种选择。
  • JWT 是标识符。使用 XSS 可以窃取 JWT,黑客可以在不知道凭据的情况下冒充用户。因此,JWT 不防篡改可能无法解决 JWT 劫持问题。
  • @Ramesh 好点。许多有安全意识的网站,比如银行网站,都会给他们的 JWT 一个很短的生命周期,来处理你提到的问题。
  • 引入了 Http Only cookie 以避免通过注入的 javascript 劫持 Cookie。现代技术是CSP。它将允许我们指示允许执行哪些脚本。阻止 eval 和 inline 将有助于降低 XSS 的风险
猜你喜欢
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多