如何防止網站短信驗證碼被攻擊


  現在手機已經成為了人們必不可少的東西,手機號幾乎成了我們身份ID,當前在互聯網各大網站、APP等注冊幾乎都是通過手機號驗證短信來完成注冊,短信驗證碼發送一般我們都調用的第三方接口,當然這個是收費的。一般我們在調用第三方短信發送接口時,如果防御沒做好,很有可能就成為了黑客攻擊的點,可能會在幾分鍾內就能把你幾條短信給耗光,所以做好短信驗證碼防御是十分重要的,下面我們分享幾個方法,本人也是結合了其它網友的方法再加上自己的實踐做個完善和補充,希望能幫到需要的人。

(1)單個手機號發送次數限制

比喻每個手機號一天最多只允許收到5條等,這個一般不需要自己在程序里設置,因為一般短信接口商那邊可以設置,只需跟客服說一下就可以實現。當然一般黑客攻擊其實是用了成千上萬個手機號的,重復一個手機號去攻擊很少。

(2)發送時間間隔限制

比喻設置60秒或120秒后可再發送,這里注意一點,這個限制要做兩面,不僅前端html上對按鈕進行失效設置,同時后端也需要驗證這個時間限制間隔,只做前端只能防小白。

(3)增加其它字段的驗證

在發送手機驗證碼前,先讓用戶把如用戶名、郵箱、密碼等字段填寫完整並驗證可行性,再允許用戶發送手機驗證碼。

(4)增加圖形驗證碼

圖形驗證碼需要保存在Session里面,並且使用完了一個圖形驗證碼后需立即讓這個圖形驗證碼失效,防止黑客一直用一個圖形驗證碼通過。

(5)同一個IP限制發送次數

這里需要開發者先能獲取到客戶端的真實IP地址,在我的博客上一篇文章《JS和C#.NET獲取客戶端IP》中有說到如需獲取客戶端IP的方法。這個限制只能產生一定的限制,作用有限,因為黑客往往都是切換IP的

(6)判斷用戶發送驗證碼的頁面入口是否是你的注冊頁面

這一點很重要,黑客在攻擊的時候都是直接調用你發送驗證的那個中間頁面,可能直接跳過了你的注冊頁面入口,他會按照你的方法拼好要傳輸的參數字段直接去調用方法,這個時候我只要在后台判斷一下用戶進來的入口是否是注冊頁面的地址就行。迫使黑客通過注冊頁面入口進行入侵,但是這顯然加大了攻擊的成本。

(7)記錄下驗證碼發送的日志,根據日志分析制定防范方法

如果上面6點做完還是發現攻擊存在,那么就需要根據記錄下的驗證碼發送日志分析來制定相應的防范措施了,例如下面就是我截取的一段日志:

 

這是一段大概3分鍾內攻擊日志的截圖,大家可以看一下手機欄和IP欄,基本IP是一直在換,所以很難去限制,但是仔細分析手機號,發現手機號前6位甚至是前7位重復的概率很高,那么這時候就要對手機號段(前6或前7)來制定防范方案了,根據這些,我這里是做的兩點供參考:

a.同一個手機號碼段(手機號前6位)120秒內最多發送一次

b.同一個號碼段(手機號前6位)當天最多發送10條

c.同一個號碼段(手機號前6位)當天發送3次以上且還沒有注冊的話,不再發送。

 

一般情況下,我們只需要做到以上幾點基本上可以有效防止短信驗證碼的攻擊。

綜上,所謂“道高一尺魔高一丈”,我們很難完全限制住黑客的入侵攻擊,我們只能想辦法去增加黑客的攻擊成本,迫使他們放棄攻擊。

以上就是我要分享的內容,大家還有更好的方法歡迎留言補充。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM