事件#
接口來源
1.WEB 註冊接口
2.APP 註冊接口
發送大量驗證碼
IP 數量不斷變化,大量手機號碼(不在意短信是否空號)
目前解決方案#
・增加了安全驗證碼
・輸入驗證碼再發送短信
安全方案#
0. 短信發送時間間隔限制:#
限制同一個手機號碼重複發送的時間間隔。通常設置為 60-120 秒,前端做倒計時限制,時間未到不能點擊發送短信按鈕,後台也做時間間隔限制,時間未到不能發送短信。
1.IP 限定#
根據自己的業務特點,設置每個 IP、號碼,每天的最大发送量,另外可校驗手機號碼和 IP 是否屬於同一地區
2. 修改註冊步驟#
註冊用戶,將發送短信驗證碼和設置用戶名密碼分成兩個步驟,第一步一個頁面用來設置用戶名和密碼,用戶設置用戶名和密碼發送到後台,獲取到後台返回的第一步成功回執之後,進入第二步另一個頁面發送手機短信驗證碼。(提交的速度和 IP 提交限制)
附:將手機短信驗證和用戶名密碼設置分成兩個步驟,用戶在設置成功用戶名密碼後,下一步才進行手機短信驗證,並且需要在獲取第一步成功的回執之後才可進行校驗。
3. 加入 Token#
對發送者進行唯一性識別:防止修改參數偽造多個 IP 地址和手機號碼進行惡意攻擊,用 Token 作為唯一性識別標識,後台將 Token 注入到前端,前端可以獲取到 Token,請求發送短信驗證碼接口時帶上 Token,後台接收到 Token 進行驗證,驗證未通過不能發送短信。(推薦使用這種方案)
另外把圖片和手機號碼進行綁定,
4. 增加圖片驗證碼:#
發送短信驗證碼時,要求輸入圖片驗證碼,每個圖片驗證碼僅能使用 1 次,使用 1 次後,不管輸入的圖片驗證碼是否正確自動失效。
如果輸入錯誤更新圖片驗證碼。圖片驗證碼失效可以防止圖片驗證碼識別軟件嘗試多次識別。
可以考慮複雜的圖片驗證碼或點觸驗證、滑動驗證、圖像正反。
5. 埋點#
通過 js 收集一些網頁版的設備指紋和客戶端信息上報,通過 js 生成 hash 指紋區別不同設備,同時上傳瀏覽器 ua、分辨率、平台、系統等信息,有寬泛的鑑別能力,通過此方法可以建立自己的情報庫。
對用戶進行人機驗證,例如,前段 js 的加載,用戶頁面停留的時間,判斷用戶是否代理 IP。
有能力企業可以自己做風控系統
安全測試#
在提交數據包的時候發送到 Request,先正常發送一次,分析關注數據包,然後在手機號碼後門添加逗號再繼續測試,如果可以那麼久繼續反復添加逗號,即可達到無限制。
-
並且此方法還可能繞過系統設置的每天最大发送短信數。
-
並且經過測試,逗號、點、減號、空格等等均可能達到繞過的目的。
-
也可以通過改變或者增加手機區號來測試
在測試短信轟炸方面,可以增加一些字符來進行測試,比如說微信曾經也爆出過在註冊的時候,增加分號,可以進行多號碼註冊等。
- 思路決定出路