上晃悠的人,對(duì)上面這張圖都不會(huì)陌生。特別是在注冊(cè)新賬號(hào)、確認(rèn)交易時(shí),它們都會(huì)頻繁出現(xiàn),要求我們輸入正確的驗(yàn)證碼,那這些看上去跟我們要做的事情完全無(wú)關(guān)的驗(yàn)證碼到底有何作用呢?

0×1 誕生

首先,先介紹下驗(yàn)證碼程序的提出者,路易斯·馮·安(Luis von Ahn)。2002年,路易斯和他的小伙伴在卡內(nèi)基梅隆第一次提出了CAPTCHA(驗(yàn)證碼)這樣一個(gè)程序概念。該程序是指,向請(qǐng)求的發(fā)起方提出問(wèn)題,能正確回答的即是人類,反之則為機(jī)器。這個(gè)程序基于這樣一個(gè)重要假設(shè):提出的問(wèn)題要容易被人類解答,并且讓機(jī)器無(wú)法解答。

在當(dāng)時(shí)的條件下,識(shí)別扭曲的圖形,對(duì)于機(jī)器來(lái)說(shuō)還是一個(gè)很艱難的任務(wù),而對(duì)于人來(lái)說(shuō),則相對(duì)可以接受。yahoo在當(dāng)時(shí)第一個(gè)應(yīng)用了圖形化驗(yàn)證碼這個(gè)產(chǎn)品,很快解決了yahoo郵箱上的垃圾郵件問(wèn)題,因此圖形類驗(yàn)證碼開(kāi)始了大發(fā)展時(shí)期。

0×2 發(fā)展與問(wèn)題

圖形化驗(yàn)證碼在被證明有效后,在互聯(lián)網(wǎng)上迅速得到了推廣。國(guó)內(nèi)外各大網(wǎng)站,在關(guān)鍵的業(yè)務(wù)點(diǎn)上都加入了這一類型的驗(yàn)證碼。

首先,由于開(kāi)發(fā)者水平的良莠不齊,導(dǎo)致驗(yàn)證碼本身的實(shí)現(xiàn)存在問(wèn)題,從而導(dǎo)致漏洞可以繞過(guò),常見(jiàn)的有以下幾種類型:

[1] 驗(yàn)證碼的生成邏輯、答案用戶可見(jiàn)

如將驗(yàn)證碼答案輸出到頁(yè)面中、寫(xiě)在cookie里。打比方就是說(shuō),在發(fā)卷的時(shí)候,把答案寫(xiě)在了卷子背面。(老師再也不用擔(dān)心我的成績(jī))

[2] 驗(yàn)證碼的生命周期未控制好

如驗(yàn)證碼可以重復(fù)使用、不設(shè)超時(shí)。驗(yàn)證一次,永久使用。

[3] 業(yè)務(wù)邏輯與驗(yàn)證碼結(jié)合點(diǎn)存在問(wèn)題

如修改業(yè)務(wù)參數(shù)可導(dǎo)致不用校驗(yàn)驗(yàn)證碼也可通過(guò)、甚至驗(yàn)證碼就是擺設(shè)。結(jié)合到具體的業(yè)務(wù)點(diǎn)上有什么危害呢?

a. 驗(yàn)證碼寫(xiě)在cookie中。此處可導(dǎo)致旅客信息泄露。