1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import io.jsonwebtoken.*; import io.jsonwebtoken.security.SignatureException;
public class VulnerableJwtValidator {
private String secret = "mySecretKey";
public Claims parseToken(String token) { JwtParser parser = Jwts.parser().setSigningKey(secret); Jwt jwt = parser.parse(token);
return (Claims) jwt.getBody(); } }
|
在上面的代码中如果在审计时不注意很容以漏掉,虽然parser已经设置了secretkey,貌似时没有什么问题,攻击这在不知道key的情况下时不可能伪造token的,
但危险往往就藏在这漫不经意间,如果攻击者构造的token设置了alg为none,那么secretkey 将完全失效parse方法调用将返回一个默认的Jwt对象,
为了避免这个问题,应该增加响应类型的检查确认其为Jws的子类方可有效避免绕过。