不少朋友們對於登陸必然遇到的驗證碼這個事情很不理解,增長用戶操做的冗餘性,直接登陸很方便,爲何web端登陸要添加個驗證碼?直到上週,一家作業務安全的公司給出咱們如今Web網站的安全報告,我才意識到:驗證碼的本質屬性安全性,除了防止惡意破解密碼、刷票、羊毛黨、論壇灌水、爬蟲等行爲外,仍是用戶與網站信息安全的有力保障。web
下面是咱們安服技術人員給的從安全角度看,爲何Web登陸須要驗證碼?安全
由於你的WEB站有時會碰到客戶機惡意***。其中一種很常見的***手段就是身份欺騙,它經過在客戶端腳本寫入一些代碼,而後利用其客戶機在網站、論壇反覆登錄,或者***者建立一個HTML窗體,其窗體若是包含了你註冊窗體或發帖窗體等相同的字段,而後利用"http-post"傳輸數據到服務器,服務器會執行相應的建立賬戶,提交垃圾數據等操做。若是服務器自己不能有效驗證並拒絕此非法操做,它會很嚴重耗費其系統資源,下降網站性能甚至使程序崩潰。服務器
一、HTML語法暴露的帳戶安全問題網絡
標準的HTML語法中,支持在form表單中使用<input></input>標籤來建立一個HTTP提交的屬性,現代的WEB登陸中,常見的是下面這樣的表單:ide
<form action = "http://localhost:8080/Application/login" method = "POST"> 用戶名:<input id="username" name="username" type="text" /> 密碼:<input id="password" name="password" type="password" /> <button type="submit">登錄</button></form>
工具
form表單會在提交請求時,會獲取form中input標籤存在name的屬性,做爲HTTP請求的body中的參數傳遞給後臺,進行登陸校驗。post
例如帳號是user1,密碼是123456,那麼在提交登陸的時候會給後臺發送的HTTP請求以下(Chrome或者FireFox開發者工具捕獲,需開啓Preserve log):性能
能夠發現即使password字段是黑點,可是本機仍以明文的形式截獲請求。網站
二、HTTP協議傳輸直接暴露用戶密碼字段spa
在網絡傳輸過程當中,被嗅探到的話會直接危及用戶信息安全,以Fiddler或Wireshark爲例,發現捕獲的HTTP報文中包含敏感信息:
而如今流行的判斷訪問WEB程序是合法用戶仍是惡意操做的方式,就是採用一種叫「字符校驗」的技術,WEB網站像如今的動網論壇,他採用達到方法是爲客戶提供一個包含隨即字符串的圖片,用戶必須讀取這些字符串,而後隨登錄窗體或者發帖窗體等用戶建立的窗體一塊兒提交。
那麼該怎麼辦?有什麼防禦的辦法呢?這時候咱們的安全研究人員就發明了驗證碼。具體發明史記介紹詳見我前幾篇文章的介紹。由於人的話,能夠很容易讀出圖片中的數字,但若是是一段客戶端***代碼,經過通常手段是很難識別驗證碼的這樣能夠確保當前訪問是來自一我的而非機器和AI機器人。
驗證碼:就是將一串隨機產生的數字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,輸入表單提交網站驗證,驗證成功後才能使用某項功能。
典型應用場景:
網站安全:垃圾註冊、惡意登陸、惡意***
數據安全:數據爬取、數據破壞、帳號盜用
運營安全:惡意刷單、虛假秒殺、虛假評論、佔座、刷票
交易安全:虛假交易、惡意套現、盜卡支付
意義:如今網站爲了防止用戶利用機器人自動註冊、登陸、灌水、刷票、薅羊毛等,都採用了驗證碼技術。
當下,隨着科技的發展,驗證碼在交互形式上也獲得了很大的提高,愈來愈注重用戶體驗,好比頂象的智能無感驗證,推出了無需驗證便可判別使用者身份的驗證體系,其原理其實也很是簡單。風控引擎在用戶嘗試登錄或者作其餘傳統須要驗證的操做行爲前,就會對操做環境進行掃描,並對一些關鍵參數作分析,包括經常使用IP、地理位置、使用習慣、惡意特徵、設備指紋等。基於大量模型和數據的分析,風控引擎即可以對用戶身份作出一個預先的判斷。若是風控引擎認爲使用者是「好人」,便直接放行;若是斷定爲「機器」,則不予放行;若是存疑,便給出驗證碼滑一滑。
驗證碼能有效防止對某一個特定註冊用戶用特定程序暴力破解方式進行不斷的登錄嘗試,實際上用驗證碼是如今不少網站通行的方式(好比1230六、各大銀行網上我的銀行登陸頁,BBS論壇等),雖然登錄麻煩一點,可是對網站還來講這個功能仍是頗有必要,也很重要。