如题,通过我们的服务端日志以及数据库中相关记录,发现有通过小程序微信授权手机号的方式批量灌水注册用户,存在恶意消费 手机号快速验证组件 次数的嫌疑;
我们小程序的授权流程:
- 进入小程序时,通过 wx.login 拿到 code,并请求获取 openId 的接口,这时服务端获取到 session_key 缓存但是不会返回给前端;
- 用户点击微信授权按钮拉起手机号授权面板,允许授权,回调方法中拿到 encryptedData、iv、code(动态令牌) 并发送给服务端;
- 服务端拿到 encryptedData、iv、code(动态令牌) 这三个参数后,如果 code(动态令牌) 有值会优先使用 code(动态令牌) 请求微信服务端获取手机号,否则使用 encryptedData、iv 和 session_key 解密获取到手机号;
-------------------
通过分析服务端日志,批量灌水注册用户的就是通过以上流程进行注册的,encryptedData、iv、code(动态令牌) 这三个参数齐全,而且数据库中有对应的 openId、unionId、session_key 等信息,我们手动进行了解密:
- 通过 code(动态令牌) 去请求微信服务端获取手机号,获取失败,应该是 code(动态令牌) 只能用一次的缘故;
- 通过 encryptedData、iv、session_key 解密手机号是能成功解出手机号的;
所以小程序前端灌水注册时这三个参数 encryptedData、iv、code(动态令牌) 不是伪造的,是有效可用的;session_key 是在服务端存储的,没有返回给前端,所以不存在 session_key 泄露的问题;
-------------------
另外,判断注册用户为批量灌水注册的原因:
- 日志显示这批用户接口请求的 user-agent 全部是:Mozilla/5.0 (iPad; CPU OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F5027d Safari/600.1.4,这个信息显示访问设备是 iPad,但是接口参数中上报的设备类型确实 iPhone;
- 我们的业务场景中有其他的试用固定时间戳作为注册来源,但是这批注册用户的注册来源都是动态的时间戳;
- 我们的小程序页面有埋点事件,在埋点后台查不到这批用户的任何事件和页面浏览记录,同一时段有其他用户事件上报正常;
- 注册时间段集中在同一个时间段 8:00 ~ 9:00;
- 查询 we 分析平台 wx.login 接口监控数据,当天的 8:00 ~ 9:00 事件段,监控数据并无异常,没有出现爆发式增长的情况;
-------------------
灌水注册小程序基础库:2.25.4
如果需要更多信息,我这边可以私信提供;
我也是同样的问题。蹲一下看看官方怎么解释。
我的项目今天也遇到这个问题了,业务代码中并未使用快速验证组件,但是使用额度被用完了,有兴趣的话看我主页第一个提问
自己的代码问题,自查。
静默获取openid后,如果此openid 已经授权手机号,为啥还要用户点击微信授权 去授权手机号呢?