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