為什么Web端登錄需要驗(yàn)證碼?
很多朋友們對(duì)于登錄必然遇到的驗(yàn)證碼這個(gè)事情很不理解,增加用戶操作的冗余性,直接登錄很方便,為什么web端登錄要添加個(gè)驗(yàn)證碼?直到上周,一家做業(yè)務(wù)安全的公司給出我們現(xiàn)在Web網(wǎng)站的安全報(bào)告,我才意識(shí)到:驗(yàn)證碼的本質(zhì)屬性安全性,除了防止惡意破解密碼、刷票、羊毛黨、論壇灌水、爬蟲等行為外,還是用戶與網(wǎng)站信息安全的有力保障。
下面是我們安服技術(shù)人員給的從安全角度看,為什么Web登錄需要驗(yàn)證碼?
因?yàn)槟愕腤EB站有時(shí)會(huì)碰到客戶機(jī)惡意攻擊。其中一種很常見的攻擊手段就是身份欺騙,它通過在客戶端腳本寫入一些代碼,然后利用其客戶機(jī)在網(wǎng)站、論壇反復(fù)登陸,或者攻擊者創(chuàng)建一個(gè)HTML窗體,其窗體如果包含了你注冊(cè)窗體或發(fā)帖窗體等相同的字段,然后利用"http-post"傳輸數(shù)據(jù)到服務(wù)器,服務(wù)器會(huì)執(zhí)行相應(yīng)的創(chuàng)建帳戶,提交垃圾數(shù)據(jù)等操作。如果服務(wù)器本身不能有效驗(yàn)證并拒絕此非法操作,它會(huì)很嚴(yán)重耗費(fèi)其系統(tǒng)資源,降低網(wǎng)站性能甚至使程序崩潰。
下面引用3個(gè)常見的HTML攻擊舉例說明:
1、HTML語法暴露的賬戶安全問題
標(biāo)準(zhǔn)的HTML語法中,支持在form表單中使用<input></input>標(biāo)簽來創(chuàng)建一個(gè)HTTP提交的屬性,現(xiàn)代的WEB登錄中,常見的是下面這樣的表單:
form表單會(huì)在提交請(qǐng)求時(shí),會(huì)獲取form中input標(biāo)簽存在name的屬性,作為HTTP請(qǐng)求的body中的參數(shù)傳遞給后臺(tái),進(jìn)行登錄校驗(yàn)。
例如賬號(hào)是user1,密碼是123456,那么在提交登錄的時(shí)候會(huì)給后臺(tái)發(fā)送的HTTP請(qǐng)求如下(Chrome或者FireFox開發(fā)者工具捕獲,需開啟Preserve log):
可以發(fā)現(xiàn)即便password字段是黑點(diǎn),但是本機(jī)仍以明文的形式截獲請(qǐng)求。
2、HTTP協(xié)議傳輸直接暴露用戶密碼字段
在網(wǎng)絡(luò)傳輸過程中,被嗅探到的話會(huì)直接危及用戶信息安全,以Fiddler或Wireshark為例,發(fā)現(xiàn)捕獲的HTTP報(bào)文中包含敏感信息:
而現(xiàn)在流行的判斷訪問WEB程序是合法用戶還是惡意操作的方式,就是采用一種叫“字符校驗(yàn)”的技術(shù),WEB網(wǎng)站像現(xiàn)在的動(dòng)網(wǎng)論壇,他采用達(dá)到方法是為客戶提供一個(gè)包含隨即字符串的圖片,用戶必須讀取這些字符串,然后隨登陸窗體或者發(fā)帖窗體等用戶創(chuàng)建的窗體一起提交。
那么該怎么辦?有什么防護(hù)的辦法呢?這時(shí)候我們的安全研究人員就發(fā)明了驗(yàn)證碼。具體發(fā)明史記介紹詳見我前幾篇文章的介紹。因?yàn)槿说脑挘梢院苋菀鬃x出圖片中的數(shù)字,但如果是一段客戶端攻擊代碼,通過一般手段是很難識(shí)別驗(yàn)證碼的這樣可以確保當(dāng)前訪問是來自一個(gè)人而非機(jī)器和AI機(jī)器人。
驗(yàn)證碼:就是將一串隨機(jī)產(chǎn)生的數(shù)字或符號(hào),生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識(shí)別其中的驗(yàn)證碼信息,輸入表單提交網(wǎng)站驗(yàn)證,驗(yàn)證成功后才能使用某項(xiàng)功能。
典型應(yīng)用場(chǎng)景:
- 網(wǎng)站安全:垃圾注冊(cè)、惡意登錄、惡意攻擊
- 數(shù)據(jù)安全:數(shù)據(jù)爬取、數(shù)據(jù)破壞、賬號(hào)盜用
- 運(yùn)營(yíng)安全:惡意刷單、虛假秒殺、虛假評(píng)論、占座、刷票
- 交易安全:虛假交易、惡意套現(xiàn)、盜卡支付
意義:現(xiàn)在網(wǎng)站為了防止用戶利用機(jī)器人自動(dòng)注冊(cè)、登錄、灌水、刷票、薅羊毛等,都采用了驗(yàn)證碼技術(shù)。
當(dāng)下,隨著科技的發(fā)展,驗(yàn)證碼在交互形式上也得到了很大的提升,越來越注重用戶體驗(yàn),比如頂象的智能無感驗(yàn)證,推出了無需驗(yàn)證即可判別使用者身份的驗(yàn)證體系,其原理其實(shí)也非常簡(jiǎn)單。風(fēng)控引擎在用戶嘗試登陸或者做其他傳統(tǒng)需要驗(yàn)證的操作行為前,就會(huì)對(duì)操作環(huán)境進(jìn)行掃描,并對(duì)一些關(guān)鍵參數(shù)做分析,包括常用IP、地理位置、使用習(xí)慣、惡意特征、設(shè)備指紋等?;诖罅磕P秃蛿?shù)據(jù)的分析,風(fēng)控引擎便可以對(duì)用戶身份做出一個(gè)預(yù)先的判斷。如果風(fēng)控引擎認(rèn)為使用者是“好人”,便直接放行;如果判定為“機(jī)器”,則不予放行;如果存疑,便給出驗(yàn)證碼滑一滑。
驗(yàn)證碼能有效防止對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試,實(shí)際上用驗(yàn)證碼是現(xiàn)在很多網(wǎng)站通行的方式(比如12306、各大銀行網(wǎng)上個(gè)人銀行登錄頁,BBS論壇等),雖然登陸麻煩一點(diǎn),但是對(duì)網(wǎng)站還來說這個(gè)功能還是很有必要,也很重要。