如何防止驗證碼被攻擊?驗證碼可以用來攻擊單個用戶,也就是短信轟炸,也可以刷量增加網站成本,雖然一條几分錢,但是量多了也是一種成本。以下幾種驗證碼被攻擊的解決方案。
1.發送間隔限制,每過60秒或120秒之後纔可以再次發送
這個可以在前端限制點擊之後60秒內無法再次觸發事件。當然了後臺也需要限制,
每次發送成功後,可以在redis裏存儲一個字符串,key爲手機號,value帶有時間戳。同一個手機號再次發送時先從redis裏獲取字符串對比時間。
另外,這個字符串的過時時間也可用作驗證碼的有效時間,例如驗證碼5分鐘之內有效,那麼字符串的有效時間就可以設置爲5分鐘。
2.發送次數限制,每天只可以發送多少次
可以在redis內維護一條記錄,記錄的過期時間爲24小時,value爲此號碼發送短信的次數,每次發送前先獲取此號碼今天發送了多少次了,超過次數不發送。
3.同一個ip發送次數限制
這個做法和方法2類似,只不過把(號碼, 次數)換成了(ip,次數)。
4.增加圖片(或其他形式)的驗證碼
每次初始化時隨機生成一個圖片驗證碼存在session,在最後點擊發送之前需要驗證輸入的驗證碼是否正確,驗證碼使用一次後失效。
5.增加token
用戶提交請求時會攜帶token到後臺,將緩存中的token和用戶請求帶過來的token進行比較,如果相同,會將緩存中的token進行更新。若用戶重複提交,則用戶之後發過來的請求的token和緩存中的token是不一致的,所以會導致之後的請求失敗。