小程序中wx.login 登录code
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
小程序提供了一个auth验证接口,使小程序不需要额外登录,就可以让开发者获得用户的唯一标识openid。调用方法如下:
wx.login({
success:resp=>{
const code = resp.code;
//DoSomthing 携带code请求服务器
}
})
经过测试发现,code没有顺序性,例如在一段时间内请求了多个code,随便选一个都可以在微信提供的接口上验证成功并获得Openid。但是每个code只能验证一次,并且只有五分钟时效性(未测试)。
我要说的其实是伪造appId,从而获取code,并伪造登录。
小程序开发工具里是不允许修改appId为一个自己不是开发者的appId值的,所以必须搞清楚wx.login的时候微信生成这些code的原理。
经过给开发者工具设置代理并抓包,发现每次wx.login都进行了一次网络请求:
这个请求是由以下几部分组成的:
请求头:
POST /wxa-dev-logic/jslogin?_r={{random}}&newticket={{ 用户的另一个唯一标识,可伪造 }}&appid={{appId}}&platform=0&ext_appid=&os=win&clientversion=1021905151&os=win&clientversion=1.02.1905151&osversion=6.1.7601 HTTP/1.1
host: servicewechat.com
content-length: 25
Connection: close
POST数据:
{"scope":["snsapi_base"]}