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