接口防刷,痛的領悟

 

煎餅俠電影火了,有驚豔,但還是覺得故事發展有些莫名其妙。有夢想是對的,但是電影畢竟是電影。現實中可能要讀下大鵬的書?可能吧,那時的他纔算屌絲,而我一直都是。

言歸正題。藉此電影我們做了個抽獎活動。玩遊戲拿積分。積分分爲A、B、C三個等級。當然營運近一週只有3個遊戲高手獲得了C積分,膜拜遊戲大神們。我每天早上到公司都會看自己近期所做項目日誌、DB記錄的好習慣。但是突然有一天到公司後,我發現數據庫裏突然增加了500多條C記錄,而且幾乎都是相同的遊戲分數: 壞了,接口還是被刷了。

立即讓同事將這些兌獎作廢,但還是被此人兌到200多個。不爽。PM知道此事後,將此人的已兌記錄作廢。

做這種涉及獎品的營運活動,接口防刷是必須要考慮的。說實話,這麼多年的項目積累,自己在做項目的時候也會考慮很多,力爭做嚴謹。不想這次項目緊急,自己視野還是有限,道高一尺,魔高一丈。

項目上線前,我考慮的防刷是這樣的。由於抽獎流程是玩遊戲結束後分享再抽獎,兩步。所以在玩遊戲結束後讓FE調用生成token接口,傳分數,後端將分數加密生成token,寫入cookie, 另外抽獎調用接口也將分數上傳,相同加密策略,判斷token是否與cookie中一致。然後處理兌獎邏輯,返回中獎結果,清cookie。這樣可以過濾一批壞淫。而且我們規定一個用戶ID只會有一次中獎機會。項目就這樣急切上線了。

一週都很平靜。吐槽下,畢竟是抽獎,真的沒必要規定用戶到了某個分數必須會中獎。因爲活動涉及微信公衆平臺服務以及公司內部服務。這兩塊服務的穩定性都不是我能控制的。時常不按預期返回,比如超時等。這次因爲服務不穩定不中,再玩一次吧,畢竟用戶碰上兩次服務不穩定的運氣也是醉了。我最近運氣也是超級背。

這次被刷,此時此刻這個人還在兩分鐘一次的刷。我趕緊採取了措施,C獎品都返回沒獎。畢竟中獎概率本來就很低。給我時間想應對策略:

1. 前端請求本身帶了時間戳(cache:false),與服務器當前時間對比,差1分鐘就說明你根本不是真正玩家。pass掉了,因爲客戶端時間和服務器時間不一樣啊,有的用戶手機就喜歡將時間提前或延後。還記得高中時可以給表調快10分鐘,爲了是早起多讀10分鐘的書。。。

2.加IP限制。一個IP只能有2次機會。個人覺得也是OK。不過IP這東西有時候取不到。而且有人可以僞造IP。我可以將此方案加進來,但還沒這麼做。畢竟之前參加活動的用戶並沒有記錄IP。

3.get換post。 畢竟我們是在微信裏的項目,做過微信的可能知道,調用開發者接口要在微信客戶端裏打開。而在微信裏模擬post請求還是有些困難的。

4.接口請求referer。生成token接口和抽獎接口,如果按正常流程走,是有嚴格的確定referer的。而直接調接口,referer是接口本身。

5. 徹底調低C獎品庫存。之前PM說C獎品不夠再加,好吧設置了10000個!還好哥及時發現被刷,要不然真被兌換了10000個。。。我將C獎品庫存設置爲剩餘5個。最多隻會被刷5個。而且畢竟中獎概率很小。

一個用戶只能有一次機會,於是這個壞淫就註冊了500多個微信號來關注我們,然後獲取了請求記錄,依次手動調用我們的倆接口,然後退出該微信號,登錄新微信號,重複以上步驟。這個人看微信頭像就知道不是什麼好鳥:大保健廣告。。。

總之,防刷經驗還是要積累,實際上如果壞淫知道了我上述策略,還是可以能模擬的。不知道你們有什麼更好的策略。道與魔的較量,永遠不會停止。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章