短信防刷机制设计
短信驗(yàn)證碼可以驗(yàn)證手機(jī)號(hào)的有效性,短信驗(yàn)證應(yīng)用的地方越來越多,寫這篇博文的原因是因?yàn)槲宜咀罱藗€(gè)H5活動(dòng),有個(gè)發(fā)送短信驗(yàn)證碼的功能由于java組沒做防刷機(jī)制導(dǎo)致短信被刷。而他們的解決辦法令我匪夷所思,因?yàn)楦酒鸩坏阶饔谩K韵雽懸黄P(guān)于防刷的博文。
短信被刷也算網(wǎng)絡(luò)攻擊的一種,網(wǎng)絡(luò)攻防一直是相愛相殺的存在。沒有絕對(duì)的防御,只有不斷增強(qiáng)防御,提高攻擊者的攻擊成本,使其攻擊成本高于收益,從而放棄攻擊。
短信防刷也是同樣的道理,就是不斷的增加攻擊者的攻擊成本。攻擊者一般會(huì)嘗試使用不同的攻擊方式進(jìn)行試探性攻擊,根據(jù)反饋回來的信息做進(jìn)一步分析,完善攻擊方式,從而進(jìn)行有效攻擊。 所以對(duì)于明顯屬于攻擊的行為,盡量不要給出明確的錯(cuò)誤提示是非常重要的(業(yè)務(wù)邏輯錯(cuò)誤的提示除外)。 這樣,攻擊者就不能很快的判斷到底是什么地方驗(yàn)證沒通過,從而增加攻擊者攻擊成本。
下面給出詳細(xì)的放刷思路:
第一步,驗(yàn)證請(qǐng)求方式
一般網(wǎng)頁發(fā)送驗(yàn)證碼是通過ajax發(fā)送post請(qǐng)求,所以可驗(yàn)證是否是ajax請(qǐng)求、post請(qǐng)求。而APP、小程序等一般發(fā)送post請(qǐng)求接口,可驗(yàn)證是否是post請(qǐng)求。如果出現(xiàn)這類錯(cuò)誤,基本是非法攻擊行為,不要給出明確的錯(cuò)誤提示,給出諸如“系統(tǒng)錯(cuò)誤”之類的模糊提示。但,請(qǐng)求方式是可以偽造的,這種判斷只能過濾小白攻擊者,還需后續(xù)驗(yàn)證
第二步,分析請(qǐng)求頭中的Referer
一般情況下,用戶先進(jìn)入頁面輸入手機(jī)號(hào)然后點(diǎn)擊發(fā)送驗(yàn)證碼,所以可以根據(jù)請(qǐng)求頭中的Referer來
總結(jié)
- 上一篇: emoji unicode java_4
- 下一篇: 大象都能跳舞了