Vas*_*lis 8 security token jwt nuxt.js
您好stackoverflow社区!
我们使用nuxts.js框架构建了一个SPA应用程序,并且到了从后端API服务存储JWT令牌的最安全方式。
我们有两个带有httpOnly标志和localStorage标志的cookie。我阅读了大量有关这两种选择的比较的文章,尽管一半的开发人员支持cookie,一半的开发人员支持本地存储。
以我的观点,cookie似乎比localStorage在客户端存储JWT的方法更安全,但我想知道是否还有比上述选项更安全的方法。
所以我想了些事。Nuxt.js框架为我们提供了存储环境变量的机会。将JWT令牌存储为环境变量是否更安全,还是与上述选项完全一样,甚至更糟?
先感谢您!
您不能肯定地说cookie是localStorage的首选。这实际上取决于您如何实现应用程序,所使用的框架以及要执行的操作。让我更精确地描述它。
带有httpOnly的Cookie:
与HttpOnly cookie标志一起使用时,cookie无法通过JavaScript访问。
当您将jwt令牌存储在cookie中并通过set-cookie浏览器上的http请求进行设置时,浏览器将在每个请求上发送此凭据。当然,您可以通过应用httpOnly和secure标记该Cookie 来保护它。因此,没有javascript将访问它。但是问题是,您为CSRF攻击提供了机会。
当令牌存储在cookie中时,浏览器将自动将其与每个请求一起发送到同一域,这仍然容易受到CSRF攻击。
localStorage:
另一方面,在每个请求的Authorization标头中发送jwt令牌。因此,浏览器不会在您的请求中自动设置它。应该在客户端通过javascript在每个请求上进行设置。
因此基本上,因为浏览器不会自动添加到每个请求中,所以默认情况下它不会受到CSRF的攻击。
但是问题出在您的客户端代码容易受到攻击时XSS。在这种情况下,由于您将凭据存储在localStorage上,因此攻击者将完全控制客户端,并且可以执行任何操作。存储在cookie中的区别在于,攻击者不知道使用httpOnly标志存储的cookie的确切值。但是他可以使用该HTTP标头发送请求。
因此,我认为这取决于以下情况:
您想将jwt令牌保存在localStorage中,请确保检查所有输入并验证它们。使用一个不易受到攻击的框架XSS(可以肯定地说,框架不能声称这一点,但是至少要使用一个近期没有报告CVE的框架)。还请务必更新您的客户端代码。实施所有安全概念,例如csp和。还应注意所使用的CDN,并注意所使用的库。
您更喜欢使用Cookie并通过浏览器上的Cookie设置凭据。然后请小心实施反csrf缓解技术。始终使用https并设置secure标志。小心存在于Cookie上的攻击,例如子域攻击和中间人攻击。Django也使用两种很酷的方法来处理这种情况(在此处了解更多信息)
最后说明:我认为该主题没有通用的解决方案,任何人都可以根据其实验和知识提出建议。 顺便说一句,我更喜欢localStorage来存储从Rest API收到的凭据。但是,如果有人可以纠正我以寻求更好的解决方案,我真的很高兴。
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |