技術(shù)宅
驗證碼 ?掀起你的蓋頭來
老網(wǎng)民可能都知道,在前幾年的網(wǎng)絡(luò)世界,我們幾乎看不到什么驗證碼,驗證碼是近幾年才出現(xiàn)的新生事物,現(xiàn)在幾乎每個網(wǎng)站、論壇都會有驗證碼出現(xiàn)。驗證碼顧名思義就是用來驗證用戶某種操作(如購物網(wǎng)站提交訂單、論壇提交回復(fù)、用戶注冊)的一種技術(shù)手段(圖1)。
那么為什么現(xiàn)在網(wǎng)站要推出驗證碼?驗證碼的主要作用一是用來防止機器人注冊,同時用于驗證合法用戶的提交。泡論壇的朋友都知道,現(xiàn)在論壇里都會有很多廣告帖,大部分廣告帖都是機器人注冊的賬號,這樣純水帖給論壇管理帶來很大的不便。因此為了阻止機器人自動注冊賬號和自動發(fā)布廣告帖,很多論壇在注冊時引入了驗證碼機制,通過隨機出現(xiàn)的圖片或數(shù)字密碼來阻止機器人的自動注冊(圖2)。
驗證碼的另一個作用則是用來減緩網(wǎng)站服務(wù)器的處理壓力。對于一些大型的網(wǎng)站或論壇,因為同時在線的用戶很多,如12306網(wǎng)站在2015年春運高峰日的PV值是297億,流量增加1000倍。面對這樣海量、高并發(fā)訪問流量,如果用戶在提交訂單的時候不引入驗證碼機制來延緩提交,那么網(wǎng)站服務(wù)器就會瞬間當機。當然驗證碼的存在也可以阻止機器人自動提交訂單(圖3)。
免輸入——搶票軟件如何自動輸入驗證碼
如上所述,驗證碼的作用主要是阻止類似機器人的自動操作。不過使用搶票軟件購票的朋友都知道,雖然12306網(wǎng)站在登錄、提交訂單的時候都用了驗證碼機制,不過這些驗證碼并沒有給搶票軟件造成任何麻煩,它們?nèi)匀豢梢栽诤笈_自動輸入驗證碼(圖4)。
這些軟件是怎么突破驗證碼封鎖的?其實對于早期12306網(wǎng)站使用的數(shù)字(包括字母)方式的驗證碼,搶票軟件是通過OCR識別技術(shù)來通過驗證的。比如上圖的驗證碼字符是“kdte”(驗證碼一般忽略字母大小寫),這樣當搶票軟件讀取到上述圖片時,它會將這個圖片傳輸?shù)椒?wù)器,這樣在服務(wù)器上的OCR軟件通過掃描就可以快速獲得正確的驗證碼,掃描結(jié)果返回搶票軟件就可以直接輸入正確的驗證碼了(圖5)。
同樣的對于網(wǎng)站其他需要輸入驗證碼的地方,搶票軟件都是通過上述方法實現(xiàn)準確的識別和正確的輸入,從而實現(xiàn)自動、高效的購票。
道高一尺魔高一丈——驗證與反驗證
簡單字符式的驗證碼容易被機器識別,為了提高驗證碼的效率,現(xiàn)在很多網(wǎng)站紛紛使用各種方法來加強OCR識別的難度。一些網(wǎng)站使用類似“7+2=?”的簡單算術(shù)式(用戶通過輸入正確答案)來作為驗證方式,一些網(wǎng)站則使用中文字符來作為驗證碼,另一些網(wǎng)站如騰訊網(wǎng)站在注冊QQ賬號頁面,則通過為驗證碼添加背景圖片來干擾機器的OCR識別(圖6)。
不過人眼都可以輕松識別,對于機器OCR來說更是小菜一碟,比如類似“7+2=?”簡單算術(shù)式的驗證,除了OCR只要再將識別結(jié)果進行簡單運算即可獲得正確的驗證碼。
既然簡單字符式的驗證碼容易被機器識別,于是一些網(wǎng)站開始使用圖片式的方法來作為驗證碼。12306網(wǎng)站近日就啟用了全新的圖片驗證方式,當用戶在登錄12306時,必須使用鼠標在8張圖片上點擊符合要求的圖片,點擊后會在圖片上留下鐵路標記(圖7)。
圖片驗證碼看上去要比字符式的復(fù)雜,那么識別起來是不是就更難?其實對于機器識別來說,圖片驗證碼的難度并沒有提高多少,字符識別機器是通過OCD掃描識別,圖片同樣可以借助圖片識別技術(shù)進行精準的識別。相信很多朋友已經(jīng)使用過百度的“以圖找圖”功能,這個實際上就是典型的機器圖像識別技術(shù)(圖8)。
當然就具體操作而言,圖片識別流程和OCR相似。以上述12306的驗證圖片為例,圖片服務(wù)器首先獲得網(wǎng)站的驗證碼圖片,然后將8張圖片進行編號,并且將圖片對應(yīng)的文字說明一起列出,這樣只要找到其中2張文字說明(可以是關(guān)鍵字)相同的做個標記。比如上述驗證碼圖片的正確選擇是“福娃”,這樣服務(wù)器獲得福娃信息的圖片(1、6)后,就會將點擊圖1、6指令傳輸給搶票軟件,從而實現(xiàn)圖片驗證碼的自動輸入。因此從技術(shù)角度上來說,12036采用圖片驗證碼難度并沒有比字符識別增加多少。
驗證碼的未來
驗證碼作為一種目前普遍使用的驗證手段,除了阻止機器人自動識別外,還是我們?nèi)粘2僮鞯囊粋€重要保護手段。因此各大公司也紛紛在驗證碼識別技術(shù)上進行改進,一些公司通過多種驗證的方式加強驗證的安全性。如現(xiàn)在很多在線支付網(wǎng)站就推出附加短信驗證的保護措施,除了要求輸入直接顯示的驗證碼外,還要求輸入預(yù)先綁定的手機獲取的短信驗證碼來加強驗證(圖9)。
此外,一些公司則通過人類的具體行為和機器的不同來實現(xiàn)驗證。Google就提出了一個“human behavior analysis”的方案,它的核心是將用戶的行為作為判斷人與計算機的準則。這樣推出的驗證有很強的人類思維行為,從而杜絕機器的自動識別,有效保證驗證碼的安全。
總之,當驗證碼的存在給我們?nèi)粘5木W(wǎng)絡(luò)行為(如購票)帶來不便時,用戶希望通過機器的識別來提高操作效率;而當驗證碼為在線支付等操作帶來保駕護航時,人們又希望有機器無法識別的驗證碼來保障安全,魚和熊掌不可兼得也。