【发布时间】:2018-03-07 23:29:54
【问题描述】:
在this article 中,作者描述了一个场景,黑客通过利用以下事实构造有效的 JWT 令牌:为了验证签名,验证者首先必须查看标头。如果我们总是将 RSA 与公钥私钥对一起使用,那是否完全避免了这种黑客攻击发生的可能性?
这是一个引用:
不幸的是,攻击者可以滥用它。如果服务器期待一个用 RSA 签名的令牌,但实际上收到了一个用 HMAC 签名的令牌,它会认为公钥实际上是一个 HMAC 密钥。
我假设此语句意味着如果标头中的 alg 键表示令牌正在使用 HMAC,则检查令牌的代码将切换到 HMAC。因此,如果我们总是使用 RSA 而从不使用 HMAC,因此从不检查标头,我们只需使用我们的公钥验证令牌,如果验证失败,我们拒绝访问,这能解决这个问题吗?
这种方法是否会引入任何其他安全问题?
【问题讨论】:
-
正如论文所说,只要您不根据标头中的内容选择算法,那么您应该是安全的。
-
太棒了 - 我更新了主题以更准确地反映主题。
-
根据论文,在一些弱类型语言(php、js)中存在与一些库相关的漏洞。使用公钥验证 JWT,就好像它是一个 HMAC 我认为它是一个具体的错误,而不是一个广泛的漏洞。我不认为应该完全省略标头验证,因为有有用的信息,例如可以安全推断的哈希算法(例如 RS256 vs RS512)