如何防止短信API接口遍歷

短信API接口在web中得到越來越多的應用,如用戶註冊,登錄,密碼重置等業務模塊都會使用手機驗證碼進行身份驗證。一般情況下,我們會採用這樣的安全策略,將短信發送頻率限制在正常的業務流控範圍內,比如,一個手機號一天最多下發10條短信,同時限制時效,驗證次數。但這樣的策略,攻擊者通過遍歷手機號,還是阻止不了短信資源被消耗的情況。

如何防止短信api接口遍歷呢?

在平時瀏覽網站的時候,我會稍微留意一些網站是怎麼做的,並記錄了一些短信API接口防遍歷的技術實現方式。

第一種方式:白名單

這是最簡單的一種方式,但應用場景有限,比如,在一些內部應用系統(從HR系統或其他系統同步手機號過來驗證),此時,只需要驗證是否為內部員工手機號,如不是,直接提示非內部員工手機號;如是,再執行短信api流控策略。

第二種方式:驗證碼(推薦)

用戶點擊獲取短信驗證碼的時候,彈出圖形驗證碼進行驗證,同時發送圖形驗證碼和手機號碼到後臺驗證。

如何防止短信API接口遍歷

如何防止短信API接口遍歷

當然,這種方式用戶體驗極差,每次都需要手動需要圖片驗證碼才能發送手機驗證碼,於是,有了進一步的優化方案,從用戶體驗和安全角度出發,可設計為當用戶輸入3次錯誤手機驗證碼後自動彈出驗證碼。

還有另外一種方式,採用當下比較流行的滑塊驗證或點選驗證方式,用戶體驗也會有所改善。

如何防止短信API接口遍歷

第三種方式:接口加密(不推薦)

前端與後臺協商好加密方式,比如md5(timestamp+telphone+salt),前臺發起請求時,同時發送 timestamp、telephone、sign參數,後臺接收這些參數,按照協商好的加密方式生成一個校驗值與sign進行對比,如果錯誤,則不處理。另外,js代碼混淆+短信api業務流控限制。

風險點:雖然做了代碼混淆,但js加密算法一旦洩漏,並不是一種安全的措施,但也是一種比較容易實現的技術方案。

客戶端ajax代碼實現:

以上,是三種常見的預防短信api接口遍歷的技術實現方案。

我自己是一名從事了多年開發的JAVA老程序員,辭職目前在做自己的java私人定製課程,今年年初我花了一個月整理了一份最適合2019年學習的java學習乾貨,可以送給每一位喜歡java的小夥伴,想要獲取的可以關注我的頭條號並在後臺私信我:java,即可免費獲取。

————————————————

如何防止短信API接口遍歷


分享到:


相關文章: