一、總述
驗證碼存在的意義在于區(qū)分當(dāng)前訪問者是“人”還是所謂的“機(jī)器”。這在計算機(jī)領(lǐng)域稱為“圖靈測試”,通過圖靈測試的機(jī)器可以被稱作具有人工智能的特點。而驗證碼的存在則能夠避免大多數(shù)機(jī)器通過測試,進(jìn)而避免機(jī)器對系統(tǒng)進(jìn)行大規(guī)模的惡意訪問和測試。
驗證碼的基本設(shè)計原理即通過人類主體的感官去通過驗證碼,而這樣的感官是機(jī)器所不具備的。此外,提高通過驗證碼的潛在成本也是一種方法。由上述兩種原理,總結(jié)出的**三類驗證碼 **
- 用戶輸入圖形中顯示的內(nèi)容
- 通過人體的交互、動作完成驗證
- 短信、郵箱等多平臺驗證
前兩種屬于通過主體感官去通過驗證碼,第三種屬于主動增加通過驗證碼的成本(包括開通多個手機(jī)號等需要一定成本的情況)。為了防止惡意通過短信平臺或郵箱平臺發(fā)送過多驗證消息以增大服務(wù)器負(fù)擔(dān),通常第三種驗證方式會與前兩種方式結(jié)合。下面將對每種驗證方式進(jìn)行詳細(xì)說明。
二、細(xì)分
2.1. 圖形驗證碼
圖形驗證碼是相對早期出現(xiàn)的驗證碼形式,總體來說現(xiàn)在的網(wǎng)站使用此形式驗證碼的比例是最高的。然而由于科技發(fā)展,圖像識別技術(shù)的提高,圖形驗證碼被破解的概率也越來越高。因此現(xiàn)今對安全要求較高的網(wǎng)站或流量較大的網(wǎng)站均已改用交互式的驗證方式。

隨著圖像識別技術(shù)的提高,圖形驗證碼也經(jīng)歷了兩種不同方向的改進(jìn)——一種是在圖形上添加了各種各樣的條紋等干擾信息,此方法隨著圖像識別技術(shù)的發(fā)展,條紋數(shù)量也越來越多,條紋的樣式也讓用戶眼花繚亂,進(jìn)而影響了用戶正常識讀驗證碼,降低了用戶體驗。
另一種方法是在圖形中“出計算題”讓用戶計算并輸入結(jié)果,讓用戶主觀去進(jìn)行一些機(jī)器閱讀文字但無法處理的運算。然而隨著搜索引擎的優(yōu)化,將機(jī)器識別出的文字直接放入搜索引擎中即可得到準(zhǔn)確結(jié)果,例如下圖所示。同時,部分網(wǎng)站的“計算型”驗證碼采用了多項式的計算,計算過程繁瑣,也降低了用戶體驗。

此類驗證碼在實際使用中給用戶的交互體驗是怎樣的呢?以豆瓣的找回密碼功能為例。

在“輸入上圖中的單詞”框中輸入驗證碼后,若輸入正確,點擊“重設(shè)密碼”則可以跳轉(zhuǎn)至下一頁面;若輸入錯誤,則顯示文字,提示驗證碼錯誤。輸入了的賬號不消失并生成新的驗證碼。

豆瓣在此處的交互設(shè)計得不夠人性化,通常來說,錯誤提示設(shè)計在驗證碼輸入框隔壁即可,且點擊“重設(shè)密碼”后整頁面刷新也是一種影響用戶體驗的表現(xiàn)。
個人認(rèn)為,此類圖形驗證碼的錯誤提示交互最佳表現(xiàn)應(yīng)當(dāng)為:用戶點擊“下一步”后,系統(tǒng)檢測驗證碼輸入,如果錯誤則在輸入框附近直接使用輕度提示顯示錯誤字樣,驗證碼刷新且對于的輸入框清空。至于賬號或密碼是否清空則視情況而定:如果用戶輸入信息種類繁多、內(nèi)容冗長,則傾向于為其保留內(nèi)容(當(dāng)然密碼最好清除);若內(nèi)容相對簡單,則可以直接清除,以增大破解成本。
2.2. 交互型驗證
交互型驗證碼可以說是驗證碼2.0的版本。通過人工完成一些機(jī)器無法自動完成的交互,同時系統(tǒng)反向檢測用戶的一系列動作是人工還是機(jī)器完成,雙向驗證,降低被破解的幾率。
現(xiàn)今出現(xiàn)頻率較高的交互型驗證為“滑動驗證”,即向右拖動滑塊完成拼圖。簡書的登錄界面便是這樣的設(shè)計。

該操作的基本流程如下:用戶輸入完賬號、密碼后將鼠標(biāo)輕放在滑塊上或按住滑塊,拼圖出現(xiàn);用戶向右滑動,出現(xiàn)一塊小拼圖及待放的位置。若用戶成功放置拼圖,則大拼圖閉合,右側(cè)小鎖變?yōu)榫G色勾,反之,放置失敗變?yōu)榧t色叉。通過較為輕度的提示暗示用戶驗證成功與否。
同時,該模塊會告訴用戶用了多長時間完成此項動作,在完成驗證的同時增加了趣味性??梢哉f在考慮到驗證安全的前提下兼顧了用戶體驗(簡單、有趣)。
除此之外,還有一種交互式的驗證碼,我們稱之為“點擊驗證碼”:用戶點擊插件后,系統(tǒng)會讓用戶按順序選擇圖像中的若干個文字,選擇完成后需手動點擊“驗證”才能獲知是否驗證成功。

此方法同樣利用了人和系統(tǒng)互相的驗證來確保操作是人而非機(jī)器。同樣的,此驗證方式兼顧了驗證安全及用戶體驗。此外,點擊驗證后才返回是否驗證成功的狀態(tài)也增加了破解的難度(驗證錯誤后圖片和文字會變更)
上述兩種驗證碼具有如下優(yōu)點:
- 用戶體驗好:大多數(shù)用戶無需進(jìn)行復(fù)雜的思考即可通過,同時減少了對整個業(yè)務(wù)流程的打斷
- 風(fēng)險控制能力強(qiáng):基于人類的固有行為特征以及操作的環(huán)境信息綜合進(jìn)行風(fēng)控決策,攻擊者難以批量模擬出與正常人類行為相似的操作
-
能夠攔截風(fēng)險:由于1.0時代的驗證碼還需考慮人類的實際用戶體驗,因此無法將風(fēng)險降到最低。而2.0時代的驗證碼自身已考慮到了用戶體驗,對風(fēng)險進(jìn)行攔截的可操作空間便更大
注:以上優(yōu)點總結(jié)參考知乎某匿名用戶
在我們的生活中,眾所周知地,還存在一個具有神奇驗證碼的網(wǎng)站——12306。12306的驗證碼是通過讓用戶選擇文字提示對應(yīng)的物品,通常數(shù)量為2-3個,全部選擇正確后可跳轉(zhuǎn)下一頁。

按照12306的初衷,使用此類驗證碼的原理是通過機(jī)器無法主觀識別的物品去區(qū)分用戶和機(jī)器。但在實際使用過程中,由于圖片分辨率過低(為了保證圖片大小較小能使用戶在網(wǎng)絡(luò)較差的環(huán)境下也能刷新出來),部分用戶無法在第一次選擇時就正確跳轉(zhuǎn)。同時,當(dāng)這一新型驗證碼剛剛出現(xiàn)時,也有人發(fā)表過相關(guān)的破解文,但從實際效果來看,2016年春運期間,許多搶票軟件均無法跳過驗證碼,需要用戶自行選擇驗證碼。
從上述結(jié)果來看,12306的驗證碼的基本需求達(dá)到了——避免了機(jī)器自動識別,提高了用戶手動搶票成功的幾率。只可惜為了完成這樣的需求,犧牲了用戶體驗,部分用戶也因為錯誤地選擇了驗證碼而無法搶到車票。如果12306能夠嘗試使用前文所說的滑動/選字驗證,效果是否會更好?由于涉及到上億的交易量,相信鐵路部分不會輕易進(jìn)行此類嘗試。
2.3. 多平臺驗證
多平臺驗證是一種不能完全避免“機(jī)器”,但能夠在一定程度上增大破解成本的驗證形式。此類驗證通常需要和前兩種驗證方式進(jìn)行結(jié)合(若不進(jìn)行前兩種驗證,則使短信或郵箱服務(wù)器癱瘓的攻擊成為了可能)。
多平臺驗證的目的除了防機(jī)器注冊外,還有確認(rèn)用戶的手機(jī)號或郵箱是否正確的作用,可以防止后期用戶找回密碼時出現(xiàn)不必要的麻煩,同時避免發(fā)送推廣消息到未注冊用戶的手機(jī)或郵箱內(nèi)引起反感。
現(xiàn)今的多平臺驗證通常為單向驗證,同時也存在部分雙向驗證的網(wǎng)站。單向驗證易于理解,注冊完成后由網(wǎng)站服務(wù)器向郵箱或手機(jī)發(fā)送驗證郵件或驗證碼,用戶點擊驗證郵件內(nèi)的鏈接或輸入驗證碼即宣告完成驗證。
雙向驗證網(wǎng)站通常需要用戶通過手機(jī)向指定號碼發(fā)送指定數(shù)字,隨后用戶將收到一個新的驗證碼,將此驗證碼填入網(wǎng)站完成驗證。此驗證方式曾出現(xiàn)于12306的手機(jī)核驗功能中。此舉的目的①在于確認(rèn)用戶的手機(jī)號是正確的;②防止使用短信服務(wù)器的票販子通過服務(wù)器回復(fù)驗證碼而非通過真實的手機(jī)。

三、總結(jié)
通過分析現(xiàn)今存在的各種不同的驗證碼形式,了解它們的基本原理、用戶體驗、交互和基本流程以及存在的不足,對注冊流程有了更深一層的認(rèn)識。雖然有人認(rèn)為“注冊流程在整個產(chǎn)品中是微不足道的”,但只有對產(chǎn)品的每個細(xì)節(jié)都精益求精才能做出好產(chǎn)品。希望自己將來如果能夠有機(jī)會設(shè)計某某產(chǎn)品的注冊流程時,能夠以本文作為其中的一部分理論基礎(chǔ)。