為什麼Web端登入需要驗證碼?

2022-07-18 23:54:11 字數 1821 閱讀 4382

很多朋友們對於登入必然遇到的驗證碼這個事情很不理解,增加使用者操作的冗餘性,直接登入很方便,為什麼web端登入要新增個驗證碼?直到上週,一家做業務安全的公司給出我們現在web**的安全報告,我才意識到:驗證碼的本質屬性安全性,除了防止惡意破解密碼、刷票、羊毛黨、論壇灌水、爬蟲等行為外,還是使用者與**資訊保安的有力保障。

下面是我們安服技術人員給的從安全角度看,為什麼web登入需要驗證碼?

因為你的web站有時會碰到客戶機惡意攻擊。其中一種很常見的攻擊手段就是身份欺騙,它通過在客戶端指令碼寫入一些**,然後利用其客戶機在**、論壇反覆登陸,或者攻擊者建立乙個html窗體,其窗體如果包含了你註冊窗體或發帖窗體等相同的字段,然後利用"http-post"傳輸資料到伺服器,伺服器會執行相應的建立帳戶,提交垃圾資料等操作。如果伺服器本身不能有效驗證並拒絕此非法操作,它會很嚴重耗費其系統資源,降低**效能甚至使程式崩潰。

1、html語法暴露的賬戶安全問題

標準的html語法中,支援在form表單中使用標籤來建立乙個http提交的屬性,現代的web登入中,常見的是下面這樣的表單:

form表單會在提交請求時,會獲取form中input標籤存在name的屬性,作為http請求的body中的引數傳遞給後台,進行登入校驗。

例如賬號是user1,密碼是123456,那麼在提交登入的時候會給後台傳送的http請求如下(chrome或者firefox開發者工具捕獲,需開啟preserve log):

可以發現即便password欄位是黑點,但是本機仍以明文的形式截獲請求。

2、http協議傳輸直接暴露使用者密碼字段

在網路傳輸過程中,被嗅探到的話會直接危及使用者資訊保安,以fiddler或wireshark為例,發現捕獲的http報文中包含敏感資訊:

而現在流行的判斷訪問web程式是合法使用者還是惡意操作的方式,就是採用一種叫「字元校驗」的技術,web**像現在的動網論壇,他採用達到方法是為客戶提供乙個包含隨即字串的,使用者必須讀取這些字串,然後隨登陸窗體或者發帖窗體等使用者建立的窗體一起提交。

那麼該怎麼辦?有什麼防護的辦法呢?這時候我們的安全研究人員就發明了驗證碼。具體發明史記介紹詳見我前幾篇文章的介紹。因為人的話,可以很容易讀出中的數字,但如果是一段客戶端攻擊**,通過一般手段是很難識別驗證碼的這樣可以確保當前訪問是來自乙個人而非機器和ai機械人。

典型應用場景:

資料安全:資料爬取、資料破壞、賬號盜用

交易安全:虛假交易、惡意套現、盜卡支付

當下,隨著科技的發展,驗證碼在互動形式上也得到了很大的提公升,越來越注重使用者體驗,比如頂象的智慧型無感驗證,推出了無需驗證即可判別使用者身份的驗證體系,其原理其實也非常簡單。風控引擎在使用者嘗試登陸或者做其他傳統需要驗證的操作行為前,就會對操作環境進行掃瞄,並對一些關鍵引數做分析,包括常用ip、地理位置、使用習慣、惡意特徵、裝置指紋等。基於大量模型和資料的分析,風控引擎便可以對使用者身份做出乙個預先的判斷。如果風控引擎認為使用者是「好人」,便直接放行;如果判定為「機器」,則不予放行;如果存疑,便給出驗證碼滑一滑。

驗證碼能有效防止對某乙個特定註冊使用者用特定程式暴力破解方式進行不斷的登陸嘗試,實際上用驗證碼是現在很多**通行的方式(比如12306、各大銀行網上個人銀行登入頁,bbs論壇等),雖然登陸麻煩一點,但是對**還來說這個功能還是很有必要,也很重要。

推薦閱讀:

從安全角度看驗證碼是什麼?

讓開發頭疼的「驗證碼」有什麼用?

網路驗證碼的進化:從簡單**到無感驗證

登入驗證碼

生成驗證碼 指定驗證碼的長度 public static string createvalidatecode int length 生成隨機數字 for int i 0 i length i 抽取隨機數字 for int i 0 i length i 生成驗證碼 for int i 0 i leng...

驗證碼怎麼產生的?為什麼要用到驗證碼?

1 驗證碼目的 為了防止使用者利用機械人自動註冊 登入等,惡意增加資料庫訪問 用特定程式暴力破解密碼。2 什麼是驗證碼?所謂驗證碼,就是將一串隨機產生的數字或符號,生成一幅,裡加上一些干擾象素 防止ocr,光學字元識別,也可簡單地稱為文字識別,是文字自動輸入的一種方法。它通過掃瞄和攝像等光學輸入方式...

登入驗證碼C

一.新建乙個checkcode.aspx using system using system.data using system.configuration using system.collections using system.web using system.web.security usi...