在this article中,作者描述了黑客通过利用以下事实来构造有效的JWT令牌的情况:为了验证签名,验证者首先必须查看头部。如果我们总是使用公共私钥对的RSA,这是否完全避免了这种黑客攻击的可能性?
这是一个引用:
不幸的是,攻击者可以滥用此功能。如果服务器期望使用RSA签名但实际上收到使用HMAC签名的令牌,则会认为公钥实际上是HMAC密钥。
我认为这句话意味着如果标题中的alg
键表示令牌正在使用HMAC,则检查令牌的代码会切换到HMAC。因此,如果我们总是使用RSA而不是HMAC,因此永远不会检查标头,我们只需使用我们的公钥来验证令牌,如果验证失败,我们会拒绝访问,这是否解决了这个问题?
这种方法是否会引入任何其他安全问题?
答案 0 :(得分:1)
是的,只要你知道Algo的期望,并且你正在使用最新更新的库,你应该是好的。如果你可以访问网站https://jwt.io,你会发现它们也突出了这个漏洞,对于受影响的库,他们提到了要使用的最低版本,这个版本有问题的解决方案,即Algo验证没有通过 - 通过。
verify(string token, string algorithm, string verificationKey)
这就是我的理解。