摘要:在次失敗后,第四次請求,就返回錯誤文案驗證碼連續錯誤三次,請重新獲取短信驗證碼還有一個需要思考的維度。一般來說,短信驗證碼會有分鐘的有效期。
前言:
現如今登錄用手機驗證碼登錄是越來越常見了。雖然會增加成本,不過對用戶體驗的提升還是很有幫助的。那么,當產品經理對開發說,來按照這個原型給我搞個短信驗證碼登錄的時候。我們作為研發,應該想些什么?
這里的圖只展示了一次成功的流程。還有很多細節值得展開講下。除了短信驗證的流程以外,登錄的安全性也必須要考慮到。尤其是比較重要的后臺項目。
下面我就想圖中17個步驟拆開分析
1~4步主要的點有兩個。
前端對手機號的格式驗證,按鈕多次點擊的驗證
后端對請求驗證碼的頻率的限制
驗證規則可以寬松一點。雖然前端的驗證并不可靠,但是不代表前端的驗證沒有用。同時,當點擊了獲取驗證碼后需要將驗證碼的按鈕禁用,防止多次點擊
后端的部分則需要判斷當前ip,當前手機號是否是重復請求驗證碼。這里就需要引入重復請求驗證碼的規則。一般的規則是60秒內可以再次請求。這個時間可以通過記錄一條鍵名為請求手機號的一條緩存,過期時間為60秒。如果可以拿到值,則說明還沒有到60秒再次請求。
5~8步主要是驗證手機號背后的用戶的合法性
首先手機號的格式是必須要判斷的,雖然前端有判斷。但是后端的驗證才是可靠的驗證。后面就是通過手機號查庫。查詢的邏輯主要為
注冊用戶中是否有這個手機號
該用戶狀態是否為禁用
該用戶權限是否可以登錄當前業務
如果條件滿足就可以進行下一步了
制作/存儲驗證碼(9~10)制作驗證碼,就必須考慮兩個問題,1是驗證碼的長度 2是驗證碼的復雜度
對用戶最友好的當然是純數字,驗證碼越短越好。但是這樣對安全性就大打折扣。有沒有又對用戶友好,又安全的方案呢?
答案是有的。
首先我們假定使用4位數字的方案。如果不設置嘗試次數的限制的話,黑客使用多線程工具,在短時間內進行暴力枚舉最多1萬次就能窮舉出所有的可能,而且運氣也不一定會這么差。有可能在3000次的時候就試出來了。
那么我們的解決方案就是。同一個手機號,驗證三次。就將驗證碼失效。在3次失敗后,第四次請求,就返回錯誤文案 “驗證碼連續錯誤三次,請重新獲取短信驗證碼”
還有一個需要思考的維度。那就是短信驗證碼的有效期。一般來說,短信驗證碼會有5分鐘的有效期。這里就會有一個交叉的問題。比如一個用戶獲取到了一個驗證碼而不去驗證,過了60秒又去獲取一次。他就會有兩個有效的驗證碼。這樣明顯是不合理的,那么我就需要在獲取第二次驗證碼的時候廢棄調第一個驗證碼。使用緩存存儲驗證碼的時候,直接set就可以將上一個驗證碼給覆蓋掉,還可以重新設置5分鐘的有效期。
最后還有一個容易被忽略的問題。那就是短信防刷,我們之前的設置,都只是針對于一個手機號的防刷。還有一種刷短信是不停的更換手機號來刷的那種。解決方案可以通過,ip,ua,referer,header等參數來判斷是否是同一個客戶端發起的請求。如果是同一個客戶端在一個小時內請求超過了5次。就必須輸入一個圖形驗證碼。圖形驗證碼的實現就不用多說了。太多可以直接用的包。這樣的話可以最大限度的防止別人對我們的系統進行攻擊,同時也保障了體驗不打折扣
發送驗證碼給用戶(11~12)這步就比較簡單了。只需要按照SMS的接口文檔,傳入手機號,短信模版,驗證碼就可以發送了??梢钥紤]增加一個日志記入數據庫,用作數據分析。
驗證登錄,登錄成功(15~17)驗證登錄這步主要是要完成之前提到的。驗證3失敗3次廢棄驗證碼(無論是否匹配),驗證通過后也要廢棄驗該驗證碼。同時驗證碼通過之后還是需要再次驗證用戶的合法性。防止比較極端的情況,比如請求驗證碼的時候用戶是合法的,但是在5分鐘之內用戶被禁用了。這樣的話還是不能讓他登錄。
登錄成功的話就看自己的架構設計了。可以是token令牌也可以是session會話。建立會話之后,就算完成了一次完整的短信驗證碼登錄了!~
總結完成之后,就可以按照要求進行開發了。雖然是一個簡單的短信驗證碼,但是我發現市面很多的項目,這一塊都沒有做好(別問我,我怎么知道 哈哈哈)我們作為研發人員,一定要盡可能的考慮周全,以免出現線上事故。
微信公眾號:RichardTalked
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/62114.html
摘要:只有能看懂代碼,你才能快速準確地定位代碼中的問題。要寫出很的代碼,少不了閱讀優秀的源碼。我們的論壇和答疑群里,有一些同學會查看并解答其他人的代碼問題。實際上,我覺得就是沒看懂你只是看懂了每一行代碼的意思,但并沒有理解整個代碼的設計。 編程,又被稱作 寫代碼 。這個說法有可能會帶來一點點誤解,讓人覺得如何寫是學習編程要解決的主要問題。但事實并非如此。盡管最終代碼要在鍵盤上敲出來,但這個過...
摘要:所以我們今天只談前端加密,一個部分人認為沒有意義的工作。在中,認證過程使用了非對稱加密算法,非認證過程中使用了對稱加密算法。非對稱加密上文中我們討論了前端的哈希加密以及應用的場景。 showImg(https://segmentfault.com/img/bVAhTC); 當然在談安全。 前端安全是Web安全的一部分,常見的安全問題會有XSS、CSRF、SQL注入等,然而這些已經在程師...
摘要:前端日報精選技術周刊譯文四種使用提升應用的方式當我們談論前端架構時,我們到底在談論什么是的,來了與之爭發布中文譯是的,來了掘金第期實踐總結個必備的裝逼技巧掘金年學習最好的書籍圓形隨機分布種事件驅動的架構試用知識總結個人文章 2017-07-14 前端日報 精選 SegmentFault 技術周刊【譯文】四種使用webpack提升Vue應用的方式當我們談論前端架構時,我們到底在談論什么?...
摘要:接下來我們深入函數,看看它干了什么。在我們寫的代碼里,我們會手動將元素掛載到樹上。到這里,我們已經完成了元素掛載的全過程,接下來我們看一看更新的時候會發生什么。這部分應該是負責的,我們要在組件的方法中調用。 etch簡介 首先我們有必要介紹一下etch。 etch是atom團隊下的開源項目,是一套非常簡潔然而功能十分完善的virtualDOM機制。我在偶然的情況下接觸到了這個開源項...
閱讀 3027·2023-04-25 18:06
閱讀 3271·2021-11-22 09:34
閱讀 2856·2021-08-12 13:30
閱讀 2044·2019-08-30 15:44
閱讀 1660·2019-08-30 13:09
閱讀 1629·2019-08-30 12:45
閱讀 1715·2019-08-29 11:13
閱讀 3608·2019-08-28 17:51