產品安全:短信驗證碼的防攻擊策略
在短信驗證碼的產品設計過程中有哪些事項是需要注意的呢?
短信驗證碼如今的應用之廣無需贅述,各大銀行的網上銀行、各種手機APP、各種類型的網站,都需要借助短信驗證碼完成相關業務。在使用過程中,由于產品設計過程中防范意識薄弱,經常會出現短信被惡意攻擊的事件,引起一些不必要的損失。下面我們就一起了解下短信驗證碼產品設計過程中的注意事項。
短信惡意攻擊的目的是什么?
目前市面上的短信惡意攻擊無非是有兩種目的:
第一是以攻擊某個特定的手機號為目的,黑客利用互聯網中多個未經防護的短信發送接口,循環調用接口向該手機號發送短信,使手機號的擁有者不堪其擾。
第二是以惡意刷取目標網站短信驗證碼費用為目的,黑客發現某個未加防護的短信發送接口后,會按照某個手機號碼列表,循環發送短信驗證碼,攻擊期間黑客會不斷變換ip地址,可刷取數以萬計甚至更高的短信費用。被攻擊的公司在損失費用的同時,也必定會收到用戶的投訴,公司形象也會受損。
容易被攻擊的場景
最常被攻擊的場景是用戶注冊頁面,或者是手機短信驗證碼快捷登錄頁面、網絡在線投票等頁面。此類場景下的發送短信驗證碼的接口,往往未對調用方進行相關的身份驗證。
幾種防攻擊策略使用過程中的思考
幾種防攻擊策略都能在一定程度上起作用,但是會對用戶體驗產生不同的影響,在實際使用過程中,需要考慮到實際情況,組合使用以下策略。
設置短信發送時間間隔
設置同一個號碼重復發送的時間間隔,一般設置為60-120秒。該手段可以在一定程度上防止短信接口被惡意攻擊,且對用戶體驗沒有什么傷害。但是不能防止黑客更換手機號進行攻擊,防護等級較低。
手機號獲取短信驗證碼次數限制
限制某個特定手機號某個特定時間段內獲取短信驗證碼次數的上限。采用這種策略時在產品設計過程中,有幾點值得認真思考。
- 謹慎定義上限值。根據業務真實的情況,甚至需要考慮到將來業務的發展定一個合適的上限值,避免因用戶無法收到短信驗證碼而帶來的投訴。
- 謹慎定義鎖定時間段??梢允?4小時,可以是12小時、6小時。需要根據業務情況進行定義。
- 考慮用戶手機無法獲取到短信驗證碼的后續方案。如果真的有用戶無意間觸發了上限值,但是他真的需要使用某項業務,有可能打客服電話。此時可以讓用戶等待,渡過鎖定期后自行解鎖。也可以在客服操作的后臺,增加手動解鎖功能,這里就不展開說了。
IP限制
設置單個IP地址某個時間段內最大的發送量。該手段可很好的預防單一IP地址的攻擊,但是也有兩個很明顯的缺點:
- 對于經常變更IP地址進行攻擊的黑客,該手段沒有很好的效果。
- IP的限制經常會造成誤傷。如在一些使用統一無線網的場所,很多用戶連接著同一個無線網,這個IP地址就容易很快達到上限,從而造成連接該無線網的用戶都無法正常的收到驗證碼。
增加圖形驗證碼
在發送短信驗證碼之前,必須通過通過圖形驗證碼的校驗。這種手段可有效地防止各種攻擊,因此也是目前非常普遍的短信防攻擊機制。但是在使用過程中涉及到用戶體驗問題,不能簡單粗暴地套用這一策略。以下幾個點值得仔細斟酌:
- 能不能每次發送短信驗證碼的時候,都先輸入圖形驗證碼?我的意見是最好不要,一般來說這樣做會極大地影響用戶體驗,雖然是安全了,但是用戶用著不爽了。
- 可以給一個安全范圍。不妨結合手機號限制、IP限制來考慮,比如同一個手機號當天第3次獲取圖形驗證碼的時候,出現圖形驗證碼;比如同一個IP地址當天獲取驗證碼次數超過100次后,出現圖形驗證碼。
- 圖形驗證碼的具體選用類型。有文字(字母數字)驗證碼、滑動驗證碼、選字驗證碼等,根據具體的業務場景來選取。
改變發送驗證碼的流程設定
此類策略屬于開腦洞式的、跳出常規思維的解決問題的辦法,舉兩個例子:
- 注冊的場景下,可以先讓用戶輸入手機號,接著設置密碼,密碼設置成功之后再進行短信驗證碼的發送。這樣就從流程上增大了黑客的攻擊成本,可大大避免非攻擊的概率。
- 像微信、QQ以及一些其他應用那樣,讓用戶先發送指定短信給企業,以此來驗證用戶是否掌握著這個手機,企業驗證通過后再進行接下來的短信驗證碼發送。這真是一個絕妙的主意,從根本上杜絕了黑客攻擊的可能。但是一般的應用需要謹慎使用這個功能,考慮自己的產品有沒有必要做這種功能的開發,是不是普通的策略就夠用了。而且面對這種用戶體驗不是那么好的方式,自己的產品是否有足夠的信心相信用戶一定會接受這種引導。
以上是對于幾種防攻擊策略的思考,在具體的產品設計過程中,可以綜合使用,在產品安全和優秀的用戶體驗之間尋找一個極佳的平衡。
本文由 @最初的夢想 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自 pexels ,基于 CC0 協議
“比如同一個手機號當天第3次獲取圖形驗證碼的時候,出現圖形驗證碼”
應該是:
“比如同一個手機號當天第3次獲取驗證碼的時候,出現圖形驗證碼”
優秀 ??
稍微的補充一點細節,供交流:
– 設置獲取驗證碼的時間周期
– 單位時間內(一般是一個自然日)最多獲取幾個驗證碼
– 超過獲取的數量閾值后,啟動的限制策略:限制手機號、IP,或者兩者都限制
– 附加:驗證碼輸入錯誤幾次后,強制獲取新驗證碼(平臺安全措施非驗證碼安全策略)
注冊初期為避免因為安全策略而導致用戶的流失,建議還是上第三方登錄(登陸后是否直接驗證手機號看平臺)
Web端的一些補充:
– Web端和APP 的驗證碼策略是否共用,還是并行,互不干擾?
– Web端驗證碼輸入錯誤后幾次,啟用圖形驗證碼并強制重新獲?。ㄟ@個區別于先驗證圖形驗證碼后獲取手機驗證碼)
和文章有重復的點
還可以增加友情話的驗證碼圖形驗證,比如:拼接圖片成功后有一個文案提示,滿足用戶小小的虛榮心
cookie的時間設置,section的時間設置