坑產品設計出來的註冊/登入是可以取得手機驗證碼的,但是卻沒有加上圖形驗證碼。然後現在我們的這個取得驗證碼的介面被人刷了很多下。最近一個小時足足有數千次請求,而且居然還是不同的IP和不同的手機號碼....
求支招,除了加圖形驗證碼外,怎麼樣防刷?
坑產品設計出來的註冊/登入是可以取得手機驗證碼的,但是卻沒有加上圖形驗證碼。然後現在我們的這個取得驗證碼的介面被人刷了很多下。最近一個小時足足有數千次請求,而且居然還是不同的IP和不同的手機號碼....
求支招,除了加圖形驗證碼外,怎麼樣防刷?
我能想到的,除了圖形驗證碼:
基於手機號碼,限制每天每支手機最多發N條驗證碼。這個貌似LZ已經加了。
基於IP,限制每天每個IP最多發N條驗證碼... -- 缺點:容易誤殺正常用戶,慎用
【究極手段】基於使用者行為大數據分析
如何基於使用者行為分析呢?想到一個簡單的方法:
首先,正常使用者除了發送驗證碼這個請求外,應該還會存取頁面的其他資源,例如CSS/JS/HTML/圖片等。
然而,如果是刷子,他可能並不會專門去訪問這些個資源。
所以可以在使用者造訪頁面的時候就記錄一個human
參數存在session
中,每當其請求頁面中的一個資源則human += 1
。等到發送驗證碼的介面的時候,取出來這個human
參數看看其值是多少,正常的一個用戶這個human
值應該是大於某個值的(比如5
),小於的則應該就是刷子。 (為0
的肯定是刷子無疑)
我說的比較簡單啦,更複雜點的可以順便把幾次請求之間的間隔記錄下來,點擊登入或註冊按鈕前滑鼠的移動軌跡,滑鼠按下收起的時間等等記錄下來綜合分析。
要是能引用或抄一個像google做的reCAPTCHA -- 點一下就自動識別人還是機器刷子 -- 就好了。
像新狼微波那樣~ 只有用戶名和密碼存在,才發送驗證馬。
問題是透過手機驗證碼登入這個功能絕對不能再加密碼。註冊的密碼可以隨便填,意義不大
@locatejoe
不是顯示密碼之類的方式,而是把 用戶名 和 密碼 都取MD5值,拼接起來,再作哈希,映射到類似bloomFilter的過濾器中。
bloomFilter回傳不存在
則不發送驗證馬。
bloomFilter佔空間不大,速度也很快。
之前已經遇到這個問題
2天時間 2萬多條訊息刷完了
解決方法:
1.增加圖形驗證碼
2.判斷同一ip 同一手機在一個時間段內只能發送3條信息(雖然不友好)
3.判斷短信發送時間如果30分鐘內還是同一個手機和ip 就不寄
反正有很多種方法 你試試看
如果是不同的ip和手機號,那你就加上圖形驗證碼把。 。 。
增加圖形驗證碼,字體顏色什麼的別太單一。
在一次簡訊發送完成之後需要有間隔時間,前端cookie判斷,php那邊單獨進行儲存
介面需要判斷請求的ip位址和手機號,距離上次時間間隔太短不允許發送