前段時間,突遇滑鐵盧的砍價活動可以讓我頭髮禿了一大把。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而且每次使用後就會刪除映射關係。
和上次同樣不太同樣的是,運營開始主動索要異常訂單了!
已經來不及關注頭髮了。。。
有人投訴咱們了,運營說,能不能風控前置,避免異常訂單!
頭髮一抓一大把。。。