【问题标题】:How safe is JWT?JWT 的安全性如何?
【发布时间】:2016-06-19 10:39:25
【问题描述】:

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

【问题讨论】:

  • 取决于服务器使用令牌的方式。 JWS 本身只是一组属性,可以安全或不安全地使用。然而,它并没有带来任何新的保护措施。
  • 请注意,在 JWT 的某些(大多数?)实现中,令牌 cannot be revoked - 因此需要较短的到期时间

标签: security token jwt


【解决方案1】:

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

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

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

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

重要编辑

最后,回答标题中的问题“JWT 有多安全?”:这取决于您存储令牌的方式。本地存储不如使用 cookie (reference) 安全,但 cookie 可能会受到 CSRF or XSRF 攻击。

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

【讨论】:

  • 您还可以固定客户端 IP 或网络和用户代理。这有助于防止会话窃取(但也可能在客户端使用漫游、isp 代理或带有转换 IP 的运营商级 NAT 时引入问题)。
  • 非常棒的简单答案
  • 那么,您现在将 JWT 存储在哪里,您使用的技术是什么?
  • @AndreFigueiredo 您可以使用会话存储而不是本地存储
  • @user18853 本地存储也可以防止 CSRF。唯一的区别是数据可用多长时间。在现实世界中,发布敏感数据的时间更少。从安全角度来看,没有区别,因为用户可能始终打开标签。
猜你喜欢
  • 2016-08-30
  • 2016-12-10
  • 2016-08-23
  • 2021-07-14
  • 2014-10-21
  • 2018-01-30
  • 2017-07-04
  • 2021-08-10
  • 2018-11-20
相关资源
最近更新 更多