為什麼Web端登入需要驗證碼?
很多朋友們對於登入必然遇到的驗證碼這個事情很不理解,增加使用者操作的冗餘性,直接登入很方便,為什麼web端登入要新增個驗證碼?直到上週,一家做業務安全的公司給出我們現在Web網站的安全報告,我才意識到:驗證碼的本質屬性安全性,除了防止惡意盜取密碼、刷票、羊毛黨、論壇灌水、爬蟲等行為外,還是使用者與網站資訊保安的有力保障。
下面是我們安服技術人員給的從安全形度看,為什麼Web登入需要驗證碼?
因為你的WEB站有時會碰到客戶機惡意攻擊。其中一種很常見的攻擊手段就是身份欺騙,它透過在客戶端指令碼寫入一些程式碼,然後利用其客戶機在網站、論壇反覆登陸,或者攻擊者建立一個HTML窗體,其窗體如果包含了你註冊窗體或發帖窗體等相同的欄位,然後利用"http-post"傳輸資料到伺服器,伺服器會執行相應的建立帳戶,提交垃圾資料等操作。如果伺服器本身不能有效驗證並拒絕此非法操作,它會很嚴重耗費其系統資源,降低網站效能甚至使程式崩潰。
下面引用2個常見的HTML攻擊舉例說明:
1、HTML語法暴露的賬戶安全問題
標準的HTML語法中,支援在form表單中使用<input></input>標籤來建立一個HTTP提交的屬性,現代的WEB登入中,常見的是下面這樣的表單:
<form action = " 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中的引數傳遞給後臺,進行登入校驗。
例如賬號是user1,密碼是123456,那麼在提交登入的時候會給後臺傳送的HTTP請求如下(Chrome或者FireFox開發者工具捕獲,需開啟Preserve log):
可以發現即便password欄位是黑點,但是本機仍以明文的形式截獲請求。
2、HTTP協議傳輸直接暴露使用者密碼欄位
在網路傳輸過程中,被嗅探到的話會直接危及使用者資訊保安,以Fiddler或Wireshark為例,發現捕獲的HTTP報文中包含敏感資訊:
而現在流行的判斷訪問WEB程式是合法使用者還是惡意操作的方式,就是採用一種叫“字元校驗”的技術,WEB網站像現在的動網論壇,他採用達到方法是為客戶提供一個包含隨即字串的圖片,使用者必須讀取這些字串,然後隨登陸窗體或者發帖窗體等使用者建立的窗體一起提交。
那麼該怎麼辦?有什麼防護的辦法呢?這時候我們的安全研究人員就發明了驗證碼。具體發明史記介紹詳見我前幾篇文章的介紹。因為人的話,可以很容易讀出圖片中的數字,但如果是一段客戶端攻擊程式碼,透過一般手段是很難識別驗證碼的這樣可以確保當前訪問是來自一個人而非機器和AI機器人。
驗證碼:就是將一串隨機產生的數字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由使用者肉眼識別其中的驗證碼資訊,輸入表單提交網站驗證,驗證成功後才能使用某項功能。
典型應用場景:
- 網站安全:垃圾註冊、惡意登入、惡意攻擊
- 資料安全:資料爬取、資料破壞、賬號盜用
- 運營安全:惡意刷訂單、虛假秒殺、虛假評論、佔座、刷票
- 交易安全:虛假交易、惡意套現、盜卡支付
意義:現在網站為了防止使用者利用機器人自動註冊、登入、灌水、刷票、薅羊毛等,都採用了驗證碼技術。
當下,隨著科技的發展,驗證碼在互動形式上也得到了很大的提升,越來越注重使用者體驗, 基於大量模型和資料的分析,風控引擎便可以對使用者身份做出一個預先的判斷。如果風控引擎認為使用者是“好人”,便直接放行;如果判定為“機器”,則不予放行;如果存疑,便給出驗證碼滑一滑。
驗證碼能有效防止對某一個特定註冊使用者用特定程式暴力破解方式進行不斷的登陸嘗試,實際上用驗證碼是現在很多網站通行的方式(比如12306、各大銀行網上個人銀行登入頁,BBS論壇等),雖然登陸麻煩一點,但是對網站還來說這個功能還是很有必要,也很重要。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69975717/viewspace-2707808/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 登入驗證碼生成kaptcha(輸入驗證碼)APT
- json web token 實踐登入以及校驗碼驗證JSONWeb
- Web 端 實現 app “輸入驗證碼 ”的效果WebAPP
- 為什麼需要Web Service (轉)Web
- uniapp 完成兩種方式登入 驗證碼登入 密碼登入APP密碼
- app直播原始碼,登入時輸入驗證碼、簡訊驗證身份APP原始碼
- 什麼是Web workers?為什麼我們需要他Web
- 為什麼需要定期更新SSL證書?
- [譯] 為什麼我們需要 Web 3.0Web
- 帝國CMS為什麼驗證碼均顯示為“ecms”?
- PbootCMS後臺登入驗證碼看不清怎麼回事?boot
- SSL數字證書有什麼功能?為什麼需要SSL證書?
- Laravel 6.x 為註冊或登入元件新增驗證碼Laravel元件
- vue實現簡訊驗證碼登入Vue
- Laravel-admin 登入新增驗證碼Laravel
- node實現登入圖片驗證碼
- spring mvc實現登入驗證碼SpringMVC
- MySQL登入驗證方式MySql
- JS登入驗證nullJSNull
- python驗證登入Python
- 什麼是WHQL微軟徽標認證?為什麼需要這項認證?微軟
- Web 後端什麼時候需要上協程?Web後端
- Spring Security 如何新增登入驗證碼?鬆哥手把手教你給微人事新增登入驗證碼Spring
- SpringBoot 整合 Shiro 密碼登入與郵件驗證碼登入(多 Realm 認證)Spring Boot密碼
- Spring Security 一鍵接入驗證碼登入和小程式登入Spring
- uniapp 實現簡訊驗證碼登入APP
- 自動化驗證碼登入如何實現?
- 遊戲陪玩原始碼的登入方式,簡訊驗證碼登入的實現遊戲原始碼
- Laravel- Auth 登入驗證Laravel
- ASP.NET登入驗證ASP.NET
- GitHub--oauth驗證登入GithubOAuth
- Django 使用LDAP驗證登入DjangoLDA
- 作為IT從業人員,你需要什麼證?
- 登入工程:現代 Web 應用的典型身份驗證需求Web
- PbootCMS後臺關閉驗證碼,登入提示驗證碼不能空的解決方法boot
- 為什麼驅動程式簽名需要EV程式碼簽名證書
- RHCE_LAB(2)SSH遠端登入自動驗證(不輸入使用者登入密碼)的實現薦密碼
- 聊天平臺原始碼,登入時拼圖驗證原始碼