JWT 安全性如何?

问题描述 投票:0回答:2

为了项目的安全性,我正在学习 JWT,但我有一个问题。如果我在登录后正确收到令牌,但其他地方的其他人(黑客)窃取了这个特定令牌,他可以访问我的会话吗?使用 JWT 身份验证的服务器能够检测到这一点并保护我吗?怎么办?

security token jwt
2个回答
75
投票

只有服务器应该知道用于生成 JWT 的“秘密”。如果有人修改 JWT 中包含的数据,服务器将无法对其进行解码。因此服务器可以信任它可以解码的任何 JWT。

但是,如果黑客访问了您的计算机,他们就可以看到存储在浏览器中的 JWT 并使用它。同样的威胁也存在于 cookie 中,所以这并不是 JWT 的真正缺陷。

减轻这种威胁的一种方法是设置 JWT 的过期日期。对于银行应用程序,您的 JWT 可能会在几分钟后过期。对于 Facebook 来说,它可能会在几个月后过期。但是,如果有人访问您的浏览器,则没有万无一失的解决方案。

黑客的另一种方法是“中间人”攻击,拦截客户端和服务器之间的网络流量并获取 cookie/JWT。 cookie/JWT 应始终通过 HTTPS 发送,以防止出现这种情况。

重要编辑

最后,回答你标题中的问题“JWT 安全性如何?”:这取决于你如何存储令牌。本地存储不如使用 cookie 安全(参考),但 cookie 可能会受到 CSRF 或 XSRF 攻击。

这个答案曾经说过JWT比cookie更安全,因为cookie会受到CSRF攻击。但将 JWT 存储在本地存储中也不安全。因此,我不再将 JWT 存储在本地存储中,也不再使用众所周知的技术来减轻 CSRF 攻击。


0
投票

如果有人正在阅读这篇关于使用 JWT 处理会话的想法,请注意。此用例存在太多安全陷阱。

只需使用安全的 HTTPOnly cookie 即可,并在缓存中跟踪会话 ID。请注意,这些 cookie 传统上容易受到 CSRF 攻击,但由于严格的 cookie,这已不再是一个问题。

这里有一些阅读材料:

© www.soinside.com 2019 - 2024. All rights reserved.