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