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

頂象技術發表於2020-07-29

很多朋友們對於登入必然遇到的驗證碼這個事情很不理解,增加使用者操作的冗餘性,直接登入很方便,為什麼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中的引數傳遞給後臺,進行登入校驗。

undefined

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

undefined

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

2、HTTP協議傳輸直接暴露使用者密碼欄位

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

undefined

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

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

驗證碼:就是將一串隨機產生的數字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由使用者肉眼識別其中的驗證碼資訊,輸入表單提交網站驗證,驗證成功後才能使用某項功能。 

典型應用場景:

  • 網站安全:垃圾註冊、惡意登入、惡意攻擊
  • 資料安全:資料爬取、資料破壞、賬號盜用
  • 運營安全:惡意刷訂單、虛假秒殺、虛假評論、佔座、刷票
  • 交易安全:虛假交易、惡意套現、盜卡支付

意義:現在網站為了防止使用者利用機器人自動註冊、登入、灌水、刷票、薅羊毛等,都採用了驗證碼技術。

當下,隨著科技的發展,驗證碼在互動形式上也得到了很大的提升,越來越注重使用者體驗,  基於大量模型和資料的分析,風控引擎便可以對使用者身份做出一個預先的判斷。如果風控引擎認為使用者是“好人”,便直接放行;如果判定為“機器”,則不予放行;如果存疑,便給出驗證碼滑一滑。

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



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69975717/viewspace-2707808/,如需轉載,請註明出處,否則將追究法律責任。

相關文章