首頁 >後端開發 >php教程 >如何防止被人刷驗證碼?

如何防止被人刷驗證碼?

WBOY
WBOY原創
2016-10-19 10:40:521490瀏覽

坑產品設計出來的註冊/登入是可以取得手機驗證碼的,但是卻沒有加上圖形驗證碼。然後現在我們的這個取得驗證碼的介面被人刷了很多下。最近一個小時足足有數千次請求,而且居然還是不同的IP和不同的手機號碼....

求支招,除了加圖形驗證碼外,怎麼樣防刷?

回覆內容:

坑產品設計出來的註冊/登入是可以取得手機驗證碼的,但是卻沒有加上圖形驗證碼。然後現在我們的這個取得驗證碼的介面被人刷了很多下。最近一個小時足足有數千次請求,而且居然還是不同的IP和不同的手機號碼....

求支招,除了加圖形驗證碼外,怎麼樣防刷?

我能想到的,除了圖形驗證碼:

  1. 基於手機號碼,限制每天每支手機最多發N條驗證碼。這個貌似LZ已經加了。

  2. 基於IP,限制每天每個IP最多發N條驗證碼... -- 缺點:容易誤殺正常用戶,慎用

  3. 【究極手段】基於使用者行為大數據分析

如何基於使用者行為分析呢?想到一個簡單的方法:

首先,正常使用者除了發送驗證碼這個請求外,應該還會存取頁面的其他資源,例如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位址和手機號,距離上次時間間隔太短不允許發送

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn