簡訊介面安全防護策略
1. 限制同裝置標識,同IP,同手機號的傳送次數
增加簡訊介面的流控,通過請求獲取使用者裝置標識,IP,及手機號的資訊,使用者這三個屬性有一個相同,則認為是同一客戶端。針對同一客戶端,限制每個客戶端單位時間內呼叫簡訊介面的次數,如一分鐘呼叫一次。
2. 設定裝置標識,IP,手機號的黑名單
單位時間內同一裝置標識,IP或者手機號訪問簡訊介面的次數大於某一閾值時,將該標識加入到黑名單列表中。對於已被拉黑的裝置標識,IP或者手機號,同樣提示傳送成功,而後端不發出簡訊,以擾亂攻擊者視聽。由於攻擊者手機號偽造時可能會碰巧與正常使用者的手機號相同,所以講手機號加入黑名單時需要特殊注意。
加入黑名單的客戶端可以在一段時間間隔後自動解除黑名單。
3. 採用圖形驗證碼驗證,點觸驗證或滑動驗證
在傳送簡訊時,增加圖形驗證碼驗證,點觸驗證或滑動驗證。圖形驗證碼是常用的驗證碼驗證方式,但是攻擊者可以通過OCR技術進行破解,需要不定時的動態升級圖形驗證碼,增加破解難度。
推薦使用點觸驗證或滑動驗證,通過採集使用者當前各種的引數行為(行為軌距,操作時間,當前環境等等)來判斷是否為機器行為。在使用者體驗上,手機端不建議使用選字型別的驗證碼,對於非大屏的手機不是很友好。在安全性上,這類驗證碼要比其他驗證碼破解成本高。市面也有現成的方案,比如luosimao的人機驗證和極驗。
4. 檢測IP所在地是否與手機號歸屬地匹配
IP地址和手機號碼都伴隨著地理位置屬性。通過對GEO-IP庫和手機號碼歸屬地庫的對映,從地理位置的維度判斷風險,例如手機號碼歸屬地與IP歸屬地不同等等,並對來自高危地區的請求做加權識別。
5. 預傳送請求從後端獲取令牌
在傳送簡訊頁面載入時,向後端傳送請求,根據客戶端相關資訊生成令牌返回給前端。前端獲取令牌後,在傳送簡訊時,再次編碼將令牌送回傳送給後端。後端對兩次的令牌進行驗證,沒有問題再進行簡訊的傳送。
這需要前端對JS進行混淆,保證攻擊者無法從前端獲得令牌。
另外,需要限制令牌的時效性,令牌是根據時間戳生成的,只有比較短的有效時間。
6. 要求輸入實名姓名,利用API進行核對
國內手機都是實名認證的,在關鍵簡訊傳送時,可以讓使用者輸入或者從其他渠道獲取使用者的真實姓名,通過相關API對使用者的手機號真實性進行認證。
7. 通過WAF攔截無效請求
通過nginx+lua+redis構建WAF,在請求訪問應用伺服器之前就對無效請求根據策略進行攔截,如指定時間間隔內同IP請求次數大於某一閾值時,對後續請求進行攔截。