看不懂,填不對(duì),驗(yàn)證碼到底想不想讓我通過(guò)?
?審核專家:鄭遠(yuǎn)攀 鄭州輕工業(yè)大學(xué)教授 我們上網(wǎng)沖浪,經(jīng)常會(huì)遇到類似下圖所示的人機(jī)驗(yàn)證流程,需要點(diǎn)選一下其中的方框才能訪問(wèn)網(wǎng)頁(yè)內(nèi)容。
reCHAPTCHA?人機(jī)驗(yàn)證對(duì)話框?來(lái)源丨wiki 上述操作流程是為了保護(hù)網(wǎng)站安全而設(shè)置的驗(yàn)證,畢竟網(wǎng)站的注冊(cè)、登錄、領(lǐng)券、投票等應(yīng)用場(chǎng)景都存在被機(jī)器(程序腳本)刷數(shù)據(jù)進(jìn)而而造成各類損失的風(fēng)險(xiǎn)。 但是點(diǎn)一下就知道訪問(wèn)網(wǎng)站的“主體”是不是真人(human?being)?這么草率的驗(yàn)證方式真的能區(qū)分真人和機(jī)器嗎?
1
點(diǎn)選驗(yàn)證碼的原理
首先讓我們來(lái)在谷歌瀏覽器Chrome開(kāi)發(fā)者工具窗口中看看上圖所在的部分網(wǎng)站信息。按下鍵盤(pán)上的F12功能鍵,打開(kāi)如下圖所示的開(kāi)發(fā)者工具窗口之Network Panel(網(wǎng)絡(luò)面板),點(diǎn)擊人機(jī)身份驗(yàn)證的按鈕,可以看見(jiàn)左側(cè)的網(wǎng)絡(luò)傳輸數(shù)據(jù)包。
網(wǎng)站Chrome開(kāi)發(fā)者工具窗口之Network Panel(網(wǎng)絡(luò)面板)?來(lái)源丨google 也許你還看不懂這些內(nèi)容的含義,不過(guò)沒(méi)關(guān)系,只需要把這些東西看作是本地瀏覽器發(fā)給遠(yuǎn)程網(wǎng)站服務(wù)器的一些數(shù)據(jù);這些數(shù)據(jù)不是給人看的,而是給服務(wù)器看的。 服務(wù)器通過(guò)分析這些“亂碼”里的信息可以判斷其是一個(gè)真人產(chǎn)生的數(shù)據(jù)還是單純由自動(dòng)化程序代碼發(fā)出的請(qǐng)求數(shù)據(jù)包,進(jìn)而可以區(qū)分出操作的主體是人還是機(jī)器。
Python語(yǔ)言編寫(xiě)的搶課腳本代碼?來(lái)源丨Bilibili 你以為你只是“開(kāi)玩笑”一樣點(diǎn)選了一下屏幕窗口中的小方塊,然后“就進(jìn)入了后面的網(wǎng)頁(yè),但實(shí)際上你的操作會(huì)生成數(shù)據(jù)包并被發(fā)送到服務(wù)器端。 比如當(dāng)人點(diǎn)擊驗(yàn)證碼時(shí),其實(shí)是發(fā)送了一大包加密的數(shù)據(jù)。被加密的數(shù)據(jù)大概有以下幾種:
>>>>1.用戶行為數(shù)據(jù):
頁(yè)面停頓時(shí)間、點(diǎn)擊按鈕、鼠標(biāo)軌跡等;
>>>>2.環(huán)境變量:
用戶設(shè)備信息、網(wǎng)絡(luò)信息、操作系統(tǒng)信息等;
>>>>3.瀏覽器指紋:
包括請(qǐng)求頭(headers)信息,ip地址(網(wǎng)卡邏輯地址)信息,MAC地址(網(wǎng)卡物理地址)信息,地理位置信息,cookie信息等。
請(qǐng)求頭內(nèi)容 雖然這種改進(jìn)的驗(yàn)證方式方便了許多用戶,不用再像12306網(wǎng)站那樣需要用戶痛苦地從一堆圖案中選中目標(biāo)對(duì)象物體,但遺憾的是,這種驗(yàn)證和識(shí)別類驗(yàn)證碼相比,安全性上并沒(méi)有得到很大提高。 這些數(shù)據(jù)的加密由前端js代碼來(lái)完成,js代碼可以通過(guò)瀏覽器自帶的開(kāi)發(fā)者工具抓包獲得。這就說(shuō)明,理論上可以逆向分析這些代碼并找出加密邏輯,進(jìn)而偽造請(qǐng)求數(shù)據(jù)。雖然有的js代碼會(huì)被混淆得難以閱讀,但各路大佬們又見(jiàn)招拆招,發(fā)明出了反混淆工具,還原js代碼。 可以說(shuō),這種對(duì)抗自從驗(yàn)證碼出現(xiàn)以來(lái)就從未停止。
2
驗(yàn)證碼的演變過(guò)程
驗(yàn)證碼的起源可以追溯到1997年,Altavista公司的利利布里奇等程序員為了阻止黑客入侵后臺(tái),首創(chuàng)了扭曲字母驗(yàn)證碼。
來(lái)源丨ifanr 直到現(xiàn)在,這類驗(yàn)證碼依然是一些網(wǎng)站的主要驗(yàn)證方式,過(guò)于扭曲的字母常常迫使顯示器前的人們搖頭晃腦,左右扭動(dòng)地去辨認(rèn)目標(biāo)對(duì)象。 驗(yàn)證碼真正擁有姓名是在2003年,路易斯·馮·安(Luis von Ahn)斯團(tuán)隊(duì)在卡內(nèi)基梅隆大學(xué)提出了“驗(yàn)證碼(CAPTCHA)”這樣一個(gè)程序概念。CAPTCHA是英文“Completely Automated Public Turing Test to Tell Computers and Humans Apart”的首字母簡(jiǎn)寫(xiě),其中文含義是全自動(dòng)區(qū)分計(jì)算機(jī)和人類的公開(kāi)圖靈測(cè)試。 在CAPTCHA測(cè)試中,電腦會(huì)自動(dòng)生成一個(gè)問(wèn)題讓使用者來(lái)解答,由于機(jī)器無(wú)法回答出CAPTCHA的問(wèn)題,所以邏輯反推,能回答出問(wèn)題的使用者即可視為人類。 隨著安全防護(hù)與破解入侵兩方面抗衡的日益升級(jí),驗(yàn)證碼的識(shí)別難度在增加,形式也在多樣化。從誕生到現(xiàn)在,驗(yàn)證碼主要有這幾類:短信驗(yàn)證碼、語(yǔ)音驗(yàn)證碼、圖形驗(yàn)證碼、問(wèn)題驗(yàn)證碼、滑動(dòng)點(diǎn)選驗(yàn)證碼等等。
>>>>短信驗(yàn)證碼
人們可以拿手機(jī)查看驗(yàn)證碼進(jìn)行登錄操作,而程序/機(jī)器人想要進(jìn)行這種自動(dòng)化的操作會(huì)比較復(fù)雜。
來(lái)源丨jhkjsms.com
>>>>語(yǔ)音驗(yàn)證碼
人類可以接電話聽(tīng)聲音,且為了防止語(yǔ)音辨識(shí)軟件分析聲音,語(yǔ)音內(nèi)容會(huì)摻有雜音或者做出一定程度內(nèi)仍可以被人類接受的變聲。
來(lái)源丨cloud.juphoon.com
>>>>圖形驗(yàn)證碼
圖像驗(yàn)證會(huì)故意模糊中心位置,使用非程序可識(shí)別文字來(lái)達(dá)到防止機(jī)器識(shí)別的目的;視力障礙人群可選擇語(yǔ)音驗(yàn)證方式。 如圖,Image Turker 和 Audio Turker分別表示識(shí)別圖像和語(yǔ)音驗(yàn)證碼的人類。authorize.net 圖像驗(yàn)證碼是最簡(jiǎn)單的,而 google.com 音頻驗(yàn)證碼最難。
人類對(duì)于圖像和語(yǔ)音驗(yàn)證碼的識(shí)別正確率?來(lái)源丨web.stanford.edu
>>>>問(wèn)題驗(yàn)證碼
在國(guó)內(nèi)網(wǎng)站,點(diǎn)選圖案的問(wèn)題驗(yàn)證碼通常是最讓人崩潰的,一些“猜猜你是誰(shuí)”的游戲式驗(yàn)證方式,往往讓人直接放棄進(jìn)入下一步。
來(lái)源丨www.12306.cn
>>>>滑動(dòng)點(diǎn)選驗(yàn)證碼
2014年,Google推出了新的驗(yàn)證碼系統(tǒng) NoCAPTCHA reCAPTCHA,就是我們一開(kāi)始看到的那種,不需要我們輸入驗(yàn)證碼,點(diǎn)一下就行。 2018年,Google升級(jí)了reCAPTCHA,用戶甚至不需要進(jìn)行操作,系統(tǒng)會(huì)在后臺(tái)分析用戶瀏覽網(wǎng)站的方式,進(jìn)行風(fēng)險(xiǎn)評(píng)分。如果用戶評(píng)分過(guò)低,網(wǎng)站會(huì)要求用戶進(jìn)行額外的操作來(lái)證明自己是合法用戶。
來(lái)源丨知乎
3
國(guó)內(nèi)驗(yàn)證碼的特點(diǎn)
在中國(guó)比較常見(jiàn)的驗(yàn)證方式都屬于無(wú)知識(shí)型驗(yàn)證碼,它有三大優(yōu)點(diǎn):用戶體驗(yàn)好,風(fēng)險(xiǎn)識(shí)別率高,風(fēng)險(xiǎn)攔截能力強(qiáng)。
來(lái)源丨B站截圖
來(lái)源丨百度安全驗(yàn)證
>>>>用戶體驗(yàn)好
用戶不需要思考,體驗(yàn)相對(duì)流暢。
>>>>風(fēng)險(xiǎn)識(shí)別率高
隨著機(jī)器學(xué)習(xí)的發(fā)展,機(jī)器具有人類的知識(shí),簡(jiǎn)單的圖形驗(yàn)證碼也有被攻破的時(shí)候,而無(wú)知識(shí)型驗(yàn)證碼基于人類的行為特征和操作環(huán)境來(lái)綜合評(píng)測(cè)風(fēng)險(xiǎn),人類的行為難以被攻擊方模仿。
>>>>風(fēng)險(xiǎn)攔截能力強(qiáng)
在后臺(tái)執(zhí)行的評(píng)判邏輯,判斷用戶的風(fēng)險(xiǎn)指數(shù),能根據(jù)不同程度的可疑操作推送出不同難度的驗(yàn)證碼,甚至直接阻斷操作,有效進(jìn)行風(fēng)險(xiǎn)攔截。 看完本文后相信你已對(duì)驗(yàn)證碼有所了解,也明白我們?cè)L問(wèn)網(wǎng)站時(shí)為什么總需要處理那些奇怪的驗(yàn)證碼啦。