在这篇文章中,作者描述了一个场景,黑客通过利用这样一个事实来构建有效的JWT令牌,即为了验证签名,验证者首先必须查看标头。如果我们总是使用带有公钥私钥对的RSA,这是否完全避免了这种黑客攻击发生的可能性?
这里引用一句话:
不幸的是,攻击者可以滥用它。如果服务器期望使用RSA签名的令牌,但实际上收到了使用HMAC签名的令牌,它会认为公钥实际上是HMAC密钥。
我假设这个语句意味着检查令牌的代码切换到HMAC,如果标头中的alg
密钥说令牌正在使用HMAC。所以如果我们总是使用RSA而从不使用HMAC,因此从不检查标头,我们只是使用我们的公钥验证令牌,如果验证失败,我们拒绝访问,这能解决这个问题吗?
这种方法会引入任何其他安全问题吗?
是的,所以只要你知道Algo期望什么,并且你使用的是最新更新的库,你就应该很好。如果你可以https://jwt.io访问该站点,你会发现他们也突出了这个漏洞,对于他们提到的受影响的库,他们提到了要使用的最低版本,这已经解决了这个问题,即Algo验证没有被绕过。
verify(string token, string algorithm, string verificationKey)
这就是我的理解。