一個短信驗證碼功能引起的總結思考

從簡單的功能探尋背後的技術。前端

故事

昨天看到一個地址,新用戶免費領取X登讀書APP的14天會員,2020年了,要開始讀書了。看到這個活動是在筆記本上,因而用筆記本瀏覽器訪問活動頁面,輸入手機號,收到驗證碼,填寫驗證碼,領取這個會員。原本覺得一切就是這樣順利的結束了,然而並非,填寫驗證就提示「網絡錯誤」。這不科學啊,做爲程序員,我下意識的按了一下F12,打開了開發者工具,因而看到了下面的錯誤,如圖:程序員

image.png

將錯誤單獨截圖出來:數據庫

image.png

簡單一點就是出現了跨域的問題。我想了一下,那估計這個活動是針對移動端的,我用PC端訪問致使出現跨域。這個地方設計很差。跨域

因而用手機去訪問活動頁地址,正常打開,而後填寫手機號,而後提示:瀏覽器

image.png

我剛纔PC發了幾回驗證碼,這個地方設計仍是考慮到安全性了,不錯。緩存

我只能等待,在開發角度,這個就是在一個固定的時間週期內,個人手機號只能發固定次數的驗證碼,超過這個數量,就不會給我在發了,一個是安全考慮,另外一個可能也是費用考慮( 防止短信驗證碼被刷 )。安全

過了一段時間,我在去手機端試着領取,發現一切順利,領取成功。網絡

看到這裏的夥伴若是是新用戶,也對讀書有點興趣,那能夠領取這個會員體驗一下。地址:t.cn/AiFfyICx工具

到這裏本該就結束了,可是做爲一個開發人員,我以爲要簡單整理一下這個發短息的功能,由於這個功能雖然看似簡單,裏面深究起來也有不少地方須要注意以及考慮的。設計

短信驗證碼設計總結

互聯網的時代,發送短信驗證碼已經做爲不少產品中必不可少的一個功能。用於的場景也是不少,如註冊登陸、銀行轉帳、營銷活動等(真的有不少場景,我就很少舉例了)。

那在發送驗證的時候,其實不少公司用的都是第三方的短信服務,這個短信的服務是須要收費的,天下沒有免費的午飯。那麼就出現 刷短信的黑工具——短信轟炸機

短信轟炸機就是一個利用寫好的程序來大批量刷短信的軟件,它可以經過自動批量提交手機號、模擬IP等方式去刷短信。

若是 須要用到短信驗證碼的產品的時候,必定要制定限制規則 ,作好設計。

主要原則:發送驗證碼是前端和後臺是須要共同設計的,這樣相對才能更加完善或者更加完美。 主要思路:

一、時間限制

xx秒後才能再次發送

通常點擊驗證後,在前端(客戶端)會進行一個xx秒的倒數(這個倒計時能夠根據具體產品具體業務定,不少是60s)。在這固定的時間內,用戶是沒法提交屢次發送信息的請求的。

具體時效限制要考慮產品自己屬性,操做難易度,網絡延遲,短信資費成本等。

二、圖形驗證碼限制 + 時間限制

(1)、在須要發送驗證的碼的時候,先讓用戶輸入驗證碼,當輸入的驗證碼經過後,才能請求獲取短信驗證碼,不然獲取驗證按鈕不激活。 (2)、在請求獲取驗證後,通常在前端(客戶端)會進行一個xx秒的倒數(這個倒計時能夠根據具體產品具體業務定)。在這固定的時間內,用戶是沒法提交屢次發送信息的請求的。

這一點,圖形驗證碼不必定是必須的。可能爲了有更好的用戶體驗,一開始不須要輸入圖形驗證碼,在操做達到必定量以後,才須要輸入圖形驗證碼。具體狀況請根據具體場景來進行設計。

這種方法雖然使用得比較廣泛,可是卻不是很是有用,技術稍微好點的人徹底能夠繞過這個限制,直接發送短信驗證碼。 若是前臺倒計時60s,後臺驗證碼的失效時間設計確定不能是60,通常會是5~10分鐘。

三、手機號+指定時間能夠發短信次數限制

同一個手機號,指定時間以內不可以超過x條。

對使用同一個手機號碼進行註冊或者其餘發送短信驗證碼的操做的時候,系統能夠對這個手機號碼進行限制,例如,24小時只能發送5條短信驗證碼,超出限制則進行報錯(如:系統繁忙,請稍後再試)。然而,這也只可以避免人工手動刷短信而已,對於批量使用不一樣手機號碼來刷短信的機器,這種方法也是迫不得已的。

四、IP及Cookie限制

限制相同的IP/Cookie信息最大數量

使用Cookie或者IP,可以簡單識別同一個用戶,而後對相同的用戶進行限制(如:xx時間內最多隻可以發送xx條短信)。然而,Cookie可以清理、IP可以模擬,並且IP還會出現局域網相同IP的狀況,所以,在使用此方法的時候,應該根據具體狀況來思考。

這樣在第三點的基礎上防止惡意刷手機驗證碼短信,若是同一個ip屢次請求獲取手機驗證碼短信,由於短信須要錢,競爭對手極可能惡意刷去。(咱們對他人心懷善意,可是心裏要有防備之心)

五、短信預警機制

監控短信服務,作好出問題以後的防禦

以上的方法並不必定可以徹底杜絕短信被刷,所以,咱們也應該作好短信的預警機制,即當短信的使用量達到必定量以後,向管理員發送預警信息,管理員能夠馬上對短信的接口狀況進行監控和防禦。

當我整理了相關的資料後,稍微明白了今天上文出現的問題,移動端驗證碼正常驗證,而PC端不能進行驗證的緣由。多是產品設計上的限制惡意刷短信,作了跨域請求限制。 也或許這就是一個bug。

後記

一個看似簡單的功能,要簡單作能夠很簡單,要複雜也能夠很複雜,做爲一個技術人員,瞭解業務,瞭解使用場景,瞭解用戶量等,全面考慮,多端的時代,兼容性等也要考慮。

其實這個問題若是能夠仔細想清楚的話,若是之後遇到就可以全面考慮,而且開發人員老是說本身作增刪查改,這個的功能設計好,裏面涉及了增刪查改,更涉及了一個開發對功能的設計能力。

作好每個小的功能,從小的地方提高用戶體驗,是產品和開發共同的責任。

最後在說兩點,看到的朋友思考下:
一、後臺應該如何處理驗證碼,保存在什麼地方,內存,緩存,仍是數據庫?
二、怎麼樣的短信驗證碼用戶體驗好,內容和驗證碼長度?

歡迎留言,一塊兒探討交流~

手機驗證碼很重要,請不要泄露給陌生人~

相關文章
相關標籤/搜索