前段时间,突遇滑铁卢的砍价活动可以让我头发秃了一大把。html
砍价活动的业务线很简单,APP或小程序参与而后直接邀请微信好友助力,被助力成功后就能够领取限量奖品,先到先得,而帐号是跟手机号绑定的。前端
整体看来功能也不算复杂,再到上线后的跟踪,前几期活动都没啥大问题。数据库
终于在开始第四期的活动时,发现一些数据很可疑。小程序
1,线上监控日志发现不少异常调用接口的请求后端
2,存在部分新注册的用户头像同样,虽然手机号不同微信小程序
3,砍价过程当中奖品库存数量减小得很快,一个奖品最快2-3分钟就砍完了(砍价主要是邀请新用户)。微信
4,活动接入的第三方风控没有预警session
4,发现邀请的新用户助力时间分布间隔很是近并发
由于项目开发时就已经考虑了第三方风控,因此首先查看第三方风控的日志记录,发现风控后台的帐号(手机号)检测正常,这就有点矛盾了。。。app
由于正常流程是在小程序发起的,并且新用户助力须要在小程序登陆,因此能够记录到用户的unionId,结合线上被刷接口的日志。
分析后作了如下优化:
接着是测试后第五期活动上线,并实时跟踪线上活动效果,发现本来能持续3天活动奖品,当天就被抢完了,这库存减小速度明显着异常,看来是遇到羊毛党了。
好了,第五期活动一结束就拉着相关人员开会,也算是风控的真正开始。
经过会议讨论,初步发现:
1,数据库中约80%的助力记录中没有unionId,小程序最新版本正常助力会传unionId
2,因为微信小程序更新存在延迟,线上存在部分老版本,故没法回传unionId
3,部分运营反馈的风险用户,其中部分助力数据显示正常(没有重复的unionid、手机号、ip等)
4,其中第三方埋点统计的按钮点击次数也与总助力次数相差极大(考虑到用户可能屡次点击,正常状况下同一次砍价流程,埋点数>=助力次数)
5,第三方风控本次活动检测数为上期活动检测数的1/4,即大部分助力绕过了风控平台
6,因为活动助力仅能在小程序发起,即一定会绑定小程序,而unionId是用户绑定小程序的惟一凭证,因此unionId能够做为助力必传字段
发现当时为了提升性能,后端设计时,仅是在助力页面加载时作了风控效验,助力接口上没有效验。那么羊毛党获取到相关参数后,经过助力接口就能够绕过检测。
接着顺便找了几个帐号对风控作了准确性测试,发现羊毛党帐号中的所有助力用户仅能识别50%的用户为可信用度低,其余均为白名单用户,即返回数据存在误杀。
若是风控效验放到助力接口上,又不想误杀,第三方风控人员建议咱们接入滑块效验,因为接入滑块可能须要更改业务流程,影响性能的同时改动周期比较长(涉及购买合同等等),暂时不考虑。
分析后作了如下优化:
对照第三方埋点数据,通知运营对异常订单不发货,进一步避免损失吧!
个人头发开始掉了。。。
接着是测试后第六期活动上线(奖品数量较少),并实时跟踪线上活动效果,发现初期活动奖品的库存减小速度正常,后期库存减小速度异常,半天后活动所有奖品砍完。
能够看出:初期因为风控使羊毛党用户没法正常砍价,然后期怀疑羊毛党伪造脚本升级致使异常,即上期风控存在效果但还须要持续优化!
经过会议讨论,初步发现:
因此非法调用APP登陆以获取到有效token,就能绕太小程序登陆,也能正常助力,但该状况不会生成绑定关系。
此外还准备了两个杀手锏,一是页面接口加入身份校验参数A,助力时入参须要把参数A带上;二是助力接口入参PB化(Protobuff),门槛瞬间提升几丈。
和上次同样同步异常订单给运营,运营已经面露难色!
个人头发掉得更厉害了。。。
接着是测试后第七期活动上线(奖品数量多,但部分质量较低),并实时跟踪线上活动效果,发现活动共持续了3天,奖品的库存减小速度正常,到活动结束时仍然存在剩余奖品。
因为第三方数据平台会记录小程序端助力的埋点数据,补充分析以下:
1,活动完成后,统计第三方埋点数据与总的助力次数,发现99.4%的数据是正常的(埋点统计可能存在偏差)——证实风控有较好效果
2,统计砍价成功的助力数据,若是助力次数<埋点次数,则用户存在砍价异常(埋点统计可能存在偏差,5个之内能够接受)。
注:仅发现一个用户误差较大(占0.2%),已同步给运营,综合分析后发现该用户的各类砍价行为正常,可能须要再次观察 ——证实风控存在较小风险
能够看出:活动期间库存减小速度正常,短时间内使羊毛党用户没法正常砍价,整体来看此次风控是有效的(部分奖品价值较低,不排除羊毛党没参与本次砍价),因此下期活动能够放开点。
本期奖品数量多,但部分质量较低,原计划持续2天的活动仅持续了1天多点,结合反馈,第一天的凌晨后库存减小速度开始异常,用户助力时间分布间隔很是近。
。。。。。。so风控还须要再次优化!
经过会议讨论,初步发现:
1,本期活动全部助力成功用户记录有8万多条。
2,本期活动全部助力成功记录埋点有7万多条。
3,本期砍价成功的助力记录为7万多条,与神策次数对比,通过运营统计异常订单占33%。
4,存在非法用户购买了砍价工具,并发布了帮砍广告。
上图为官方说明,咱们在前端受权后,服务端会把正确的sessionKey返回给前端(官方提示不能传),若是羊毛党知道正确的OpenId、UnionID及对应的sessionKey,是否是就能反向破解sessionKey了。。。
为了兼容老版本,sessionKey作了映射,至关于返回一个假的sessionKey而且每次使用后就会删除映射关系。
和上次同样不太同样的是,运营开始主动索要异常订单了!
已经来不及关注头发了。。。
有人投诉咱们了,运营说,能不能风控前置,避免异常订单!
头发一抓一大把。。。