【问题标题】:JWT authorization and token leaksJWT 授权和令牌泄漏
【发布时间】:2020-11-22 15:31:32
【问题描述】:

我需要帮助了解用于登录功能的 JWT 令牌的安全性。具体来说,它如何防止可以看到用户数据包的攻击者的攻击?我的理解是,无论是否加密,如果攻击者获得对令牌的访问权限,他们将能够复制令牌并使用它来登录自己并访问受保护的资源。我读过这就是为什么令牌的生存时间应该很短的原因。但这实际上有多大帮助?获取资源并不需要很长时间。如果攻击者可以窃取一次令牌,他们不能在刷新后再次这样做吗?

有没有办法验证客户端发送的令牌是从您发送它的同一个客户端发送的?还是我没抓住重点?

【问题讨论】:

  • 这就是为什么令牌需要保密并且连接必须安全的原因。
  • 那么 https 解决了这个问题吗?你是什​​么意思?我们正在与客户分享它...
  • 需要注意的是,JWT 保证数据所有权但不保证加密;任何拦截令牌的人都可以看到您存储到 JWT 中的 JSON 数据,因为它只是序列化的,而不是加密的。因此,强烈建议将 HTTPS 与 JWT 一起使用

标签: python jwt access-token django-rest-auth


【解决方案1】:

补充 Matus 的出色回答:

大多数现实世界的客户端往往是浏览器和移动 UI,它们无法保密并自己进行安全加密。您所描述的风险与其他类型的消息凭据(例如 cookie)同样存在。

我的blog post详细探讨了浏览器案例,以帮助您思考。

对于您的情况,我可能会采取类似的做法:

  • 有哪些替代方案?
  • 在哪些方面存在不记名令牌?
  • 在这些领域有更好的替代方案吗?

对于某些类型的客户端,您可以增强身份验证,例如基于Mutual Trust,尽管并非所有授权服务器都支持这一点。

【讨论】:

    【解决方案2】:

    它如何防止可以看到用户数据包的攻击者的攻击?

    仅仅因为您可以看到某人的数据包并不意味着您可以看到内容。 HTTPS 对流量进行加密,因此即使有人设法捕获您的流量,他们也无法从中提取 JWT。每个使用身份验证的网站都只能通过 HTTPS 运行。如果有人能够执行中间人攻击,那就另当别论了。

    他们将能够复制令牌并使用它来登录自己并访问受保护的资源

    是的,但仅作为他们窃取令牌的用户。 JWT 已签名,这意味着您无法在不破坏服务器检测到的签名的情况下修改其内容(至少在计算上无法找到哈希冲突以便您可以修改 JWT 的内容)。对于高度敏感的访问(银行账户、医疗数据、企业云管理员账户...),您至少需要两重身份验证。

    如果攻击者可以窃取一次令牌,他们不能在刷新后再次这样做吗?

    可能,但这取决于令牌的暴露方式。如果被攻击者位于您和服务器之间的未加密通道上,那么确保他们可以重复相同的过程,但这种暴露可能是临时故障/人为错误的结果,可能很快就会得到修复,这将阻止攻击使用令牌一旦它过期了。

    是否无法验证客户端发送的令牌是从您发送到的同一客户端发送的?

    如果攻击者成功执行了中间人攻击,他们可以伪造您可能用来验证客户端的任何信息,因此答案是否定的,没有 100% 可靠的方法来验证客户端。


    我在 JWT 中看到的最大问题不是 JWT 本身,而是某些人处理它们的方式(存储在未加密的浏览器本地存储中,包含 PII、没有 HTTPS、在必要时没有 2 因素身份验证等...... )

    【讨论】:

      猜你喜欢
      • 2019-12-11
      • 2018-06-05
      • 2020-08-28
      • 2017-07-09
      • 2020-10-20
      • 2017-08-22
      • 2021-08-17
      • 2019-06-04
      • 2021-11-21
      相关资源
      最近更新 更多