Security 我们应该总是忽略JWT头中的alg参数吗?
在本文中,作者描述了一个场景,黑客利用以下事实构造有效的JWT令牌:为了验证签名,验证器必须首先查看头。如果我们总是将RSA与公钥-私钥对一起使用,这是否完全避免了这种黑客行为发生的可能性 这里有一句话: 不幸的是,攻击者可以滥用此功能。如果服务器期望使用RSA签名的令牌,但实际上收到了使用HMAC签名的令牌,那么它会认为公钥实际上是HMAC密钥 我假设此语句意味着,如果标头中的Security 我们应该总是忽略JWT头中的alg参数吗?,security,rsa,jwt,Security,Rsa,Jwt,在本文中,作者描述了一个场景,黑客利用以下事实构造有效的JWT令牌:为了验证签名,验证器必须首先查看头。如果我们总是将RSA与公钥-私钥对一起使用,这是否完全避免了这种黑客行为发生的可能性 这里有一句话: 不幸的是,攻击者可以滥用此功能。如果服务器期望使用RSA签名的令牌,但实际上收到了使用HMAC签名的令牌,那么它会认为公钥实际上是HMAC密钥 我假设此语句意味着,如果标头中的alg键表示令牌正在使用HMAC,则检查令牌的代码将切换到HMAC。因此,如果我们总是使用RSA,从不使用HMAC,因
alg
键表示令牌正在使用HMAC,则检查令牌的代码将切换到HMAC。因此,如果我们总是使用RSA,从不使用HMAC,因此从不检查报头,我们只需使用公钥验证令牌,如果验证失败,我们拒绝访问,这能解决这个问题吗
这种方法会带来任何其他安全问题吗?是的,只要您知道预期的算法是什么,并且您使用的是最新更新的库,您就应该是好的。如果您可以访问该站点,您会发现他们也会强调此漏洞,并且对于受影响的LIB,他们提到了要使用的最低版本,该版本解决了问题,即Algo验证没有通过
verify(string token, string algorithm, string verificationKey)
这就是我所理解的。正如文章所说,只要你不根据标题中的内容选择算法,那么你就应该是安全的。太好了-我更新了主题以更准确地反映主题。根据文章,一些弱类型语言(php、js)中的某些库存在漏洞。用一个公钥验证JWT,好像它是一个HMAC,我认为它比一个广泛的漏洞更具体。我不认为应该完全忽略头验证,因为有有用的信息,比如可以安全推断的哈希算法(例如RS256 vs RS512)