项目场景:
微信小程序用户静默登录后点击授权手机号登录,存在安全问题,导致任意手机号进行登录。
问题描述
点击授权手机号的时候抓包
这里泄露了sessionKey、iv和encryptedData可以直接使用插件解密加密后实现任意用户登录
对应填好后点解密就可以看到明文然后修改手机号在点击加密就可以实现任意用户登录,把修改后的密文放回拦截的包中,放包实现任意登录。
原因分析:
1.微信提供授权手机号接口版本问题,实际上微信提供了新的接口,不使用sessionkey而是使用动态验证码获取手机号
2.企业方使用有误,后端获取sessionkey后不能把它一同发给前端再由前端发送给后端
解决方案:
1: 使用Redis存储每次的sessionKey,注意key要加上uuid作区分。
2: 换成新的授权方法,点击授权后微信会发一个动态码给前端,前端传给后端,后端根据动态码和APPID、APPSECRET向微信发请求获取用户信息。
解决后的反思:
-
使用Redis存储sessionkey时当时想的很简单,直接存入;leader说了句key是什么才明白key需要做区分。所以纸上学来终觉浅,得知此事要躬行!
-
可以看出就是因为微信提供的原始方法比较繁琐使用起来存在安全问题,它才提供新方法。作为后来者的眼光去看原方法确实很呆瓜,但这就是项目的演变过程,这种认识远比我用方法一去解决更重要!