什么是jwt
JWT(英文全称:JSON Web Token) 是一个开放标准(RFC 7519),用于在双方之间安全地表示声明。一种无状态的认证机制,通常用于授权和信息交换。 是目前 最流行的跨域认证解决方案。JWT的声明一般被用在客户端与服务端之间传递身份认证信息,便于向服务端请求资源。
原理
1)客户端提交用户名密码等信息到服务端请求登录,服务端在验证通过后前发一个具有时效性的token,将token返回给客户端
2)客户端收到token后会将token存储在cookie或localStorage中
3)随后客户端每次请求都会携带这个token,服务端收到请求后校验该token并在验证通过后返回对应资源
JWT结构与内容
形式
一般是一段eyJ开头,由英文点分割开的三段字符
结构与内容
三段字符串分别对应:
1)Header:加密算法与Token类型;
2)Payload:用户信息和附加信息的声明,一般是Json类型的键值对;
3)Signature:
①base64加密后的Header
②base64加密后的Payload
③签名加密算法私钥。
jwt实战
从安全性的角度来看,至少存在两个潜在的问题。
1、缺乏机密性-我们能够轻松解码有效载荷payload(和报头header)。
2、用户插入另一个操作(例如删除)并绕过授权
靶场地址:Leaky JWT
敏感信息泄露
签名后的JWT看似是加密数据,实际上是极易解密的,若开发者在生成token时将非必要的信息放入到payload中,则可能造成敏感信息泄露,图中模拟我们已经获取到了某位用户的token,要求使用这段token信息进行登录。
将token在网站中解密可以看到用户名和密码信息。
密码用密文加密,猜测为MD5,进行MD5解密,解密出密码。
将用户名和密码填入,尝试登录,可以看到登录成功。