短信防刷机制设计
短信驗證碼可以驗證手機號的有效性,短信驗證應用的地方越來越多,寫這篇博文的原因是因為我司最近弄了個H5活動,有個發送短信驗證碼的功能由于java組沒做防刷機制導致短信被刷。而他們的解決辦法令我匪夷所思,因為根本起不到作用。所以想寫一篇關于防刷的博文。
短信被刷也算網絡攻擊的一種,網絡攻防一直是相愛相殺的存在。沒有絕對的防御,只有不斷增強防御,提高攻擊者的攻擊成本,使其攻擊成本高于收益,從而放棄攻擊。
短信防刷也是同樣的道理,就是不斷的增加攻擊者的攻擊成本。攻擊者一般會嘗試使用不同的攻擊方式進行試探性攻擊,根據反饋回來的信息做進一步分析,完善攻擊方式,從而進行有效攻擊。 所以對于明顯屬于攻擊的行為,盡量不要給出明確的錯誤提示是非常重要的(業務邏輯錯誤的提示除外)。 這樣,攻擊者就不能很快的判斷到底是什么地方驗證沒通過,從而增加攻擊者攻擊成本。
下面給出詳細的放刷思路:
第一步,驗證請求方式
一般網頁發送驗證碼是通過ajax發送post請求,所以可驗證是否是ajax請求、post請求。而APP、小程序等一般發送post請求接口,可驗證是否是post請求。如果出現這類錯誤,基本是非法攻擊行為,不要給出明確的錯誤提示,給出諸如“系統錯誤”之類的模糊提示。但,請求方式是可以偽造的,這種判斷只能過濾小白攻擊者,還需后續驗證
第二步,分析請求頭中的Referer
一般情況下,用戶先進入頁面輸入手機號然后點擊發送驗證碼,所以可以根據請求頭中的Referer來
總結
- 上一篇: emoji unicode java_4
- 下一篇: 大象都能跳舞了