gpt4 book ai didi

security - 在客户端将Json Web token JWT存储在哪里最安全?

转载 作者:行者123 更新时间:2023-12-04 06:52:47 25 4
gpt4 key购买 nike

您好stackoverflow社区!

我们使用nuxts.js框架构建了一个SPA应用程序,并且到了从后端API服务存储JWT token 的最安全方式。

我们有两个带有httpOnly标志和localStorage标志的cookie。我阅读了大量有关这两种选择的比较的文章,尽管一半的开发人员支持cookie,一半的开发人员支持本地存储。

以我的观点,cookie似乎比localStorage在客户端存储JWT的方法更安全,但我想知道是否还有比上述选项更安全的方法。

所以我想到了一些事情。 Nuxt.js框架为我们提供了存储环境变量的机会。将JWT token 存储为环境变量是否更安全,或者与上述选项完全一样,甚至更糟?

先感谢您!

最佳答案

您不能肯定地说cookie是localStorage的首选。这实际上取决于您如何实现应用程序,所使用的框架以及要执行的操作。让我更精确地描述它。

使用httpOnly的Cookie:

Cookies, when used with the HttpOnly cookie flag, are not accessible through JavaScript.



当您将jwt token 存储在cookie中并通过浏览器上的http请求 set-cookie进行设置时,浏览器将在每个请求上发送此凭证。当然,您可以通过为该cookie应用 httpOnlysecure标志来保护它。因此,没有javascript将访问它。但是问题是您为 CSRF攻击打开了机会。

当 token 存储在cookie中时,浏览器将自动将其与每个请求一起发送到同一域,这仍然容易受到CSRF攻击。

本地存储:

On the other hand, jwt tokens are sent in Authorization header in each request. So browser doesn't set it automatically in your requests. it should be set on each request via javascript on client-side.



因此基本上,因为浏览器不会自动添加到每个请求中,所以默认情况下它不会受到CSRF的攻击。

但是,当您的客户端代码容易受到 XSS攻击时,问题就来了。在这种情况下,由于您将凭据存储在localStorage上,因此攻击者将完全控制客户端,并且可以执行任何操作。存储在cookie中的区别在于,攻击者不知道使用httpOnly标志存储的cookie的确切值。但是他可以发送带有该HTTP header 的请求。

因此,我认为这取决于以下情况:

想要将jwt token 保存在 localStorage 中的
  • 中,请确保检查所有输入并验证它们。使用一个不易受XSS攻击的框架(可以肯定的是,该框架不能声称这一点,但至少应使用最近没有报告CVE的框架)。也请务必更新您的客户端代码。实现所有安全概念,例如csp和...
    另外,请注意所使用的CDN,并注意所使用的库。
  • 您更喜欢使用 cookie 并通过浏览器上的Cookie设置凭据。然后,请小心实现反csrf缓解技术。始终使用https并设置secure标志。小心存在于Cookie上的攻击,例如子域攻击和中间人攻击。
    Django也使用两种很酷的方法来处理这种情况(read more about it here)
  • 双重提交Cookie
  • 同步器 token

  • 最后说明:我认为该主题没有通用的解决方案,任何人都可以根据其实验和知识提出建议。
    顺便说一句,我更喜欢localStorage来存储从Rest API接收的凭据
    但是,如果有人可以纠正我以寻求更好的解决方案,我真的很高兴。

    关于security - 在客户端将Json Web token JWT存储在哪里最安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53668165/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com