關於圖片驗證碼組件的簡單瞭解

圖形驗證碼

作用

  • 圖形驗證碼的主要作用是強制進行人機交互,區分人和機器,以此來抵禦機器自動化攻擊。比如用戶登陸,則機器可以同時、大批量的發起請求,一來系統可能扛不住,二來機器可以不斷變換密碼來嘗試破解用戶的密碼,實現盜號。

基本邏輯

  • 架構邏輯:
    • 通過設定的規則(規則即指圖形生成的規則),將生成的校驗值存在服務端(廣義的,session/redis/也有直接放在前端),然後用戶輸入後進行校驗。
  • 驗證邏輯:
    • 行爲式驗證的核心思想是利用用戶的“行爲特徵”來做驗證安全判別。整個驗證框架採用高效的“行爲沙盒”主動框架, 這個框架會引導用戶在“行爲沙盒”內產生特定的行爲數據,利用“多重複合行爲判別”算法從特指、視覺、思考等多重行爲信息中辨識出生物個體的特徵, 從而準確快速的提供驗證結果。通過機器學習,深度學習對人的行爲特徵進行大量的分析。建立安全模型去區分人與機器程序。利用深度學習構建的神經網絡是可以不斷地自主學習的,在不斷的驗證過程中不斷的學習新的特徵分析。

分類

  • 設定規則不同:
    • 設定的規則不同可以導致驗證形式的不同,如常規的字符驗證、運算驗證、拼圖驗證、選字驗證等等
  • 校驗過程不同:
    • 生成校驗值:客戶端/服務端
    • 驗證校驗值:客戶端/服務端
  • 驗證模型的不同
    • 待研究

風險

  • 客戶端的安全問題
    • 客戶端生成驗證碼,驗證碼由客戶端生成並且僅僅在客戶端用驗證
    • 驗證碼輸出在響應包中
    • 驗證碼輸出在cookie中
  • 服務端的安全問題
    • 驗證碼不過期,沒有及時銷燬Session ID會話導致驗證碼重複使用
    • 沒有進行非空判斷
    • 產生的驗證碼內容集內的答案非常有限,導致可以被製作成字典
  • 驗證碼技術安全問題
    • 比如現在很多類型的圖形驗證碼已經可以通過技術手段識別繞過了,識別圖形驗證碼是計算機科學裏的一項重要課題,涉及到計算機圖形學,機器學習,機器視覺,人工智能等高深領域。
    • 驗證碼識別軟件:CapMonster

保障驗證碼安全的關鍵

  • 架構方面,通過組件的設計來避免客戶端/服務端出現校驗值暴露等問題
  • 行爲驗證方面,通過行爲沙盤、檢測模型的設計區別人和機器的行爲來防止自動化的惡意程序。

目前市面上的主流驗證方式

  • 基於組件的驗證:
  • 基於雲的分級驗證:驗證碼的人工智能分級引擎,經大數據篩選後,能夠準確識別可信、可疑和惡意用戶
    • 無感驗證:基於環境等多維度信息進行高效防禦,可信用戶一鍵登錄
    • 一鍵驗證:基於環境等多維度信息進行高效防禦,可信用戶只需一鍵點擊即可完成驗證
    • 滑塊驗證:基於行爲識別的滑塊驗證:可以通過滑動滑塊的響應時間,拖拽速度,時間,位置,軌跡,重試次數等來評估風險
    • VTT語義驗證:相對於滑塊類型,
      • VTT 動態語義驗證碼難度更高,具有更強的人機對抗能力。VTT 動態語義驗證碼需要用戶根據題目,選出圖中的一個或多個答案物體,並將用戶的選中區域提交給後臺判斷。在保證交互簡單無需輸入的基礎上,實現了良好的對抗效果。VTT 動態語義驗證碼的圖片由後臺 3D 渲染隨機產生,保證圖片不會重複,語義也可以根據圖片中的物件屬性組合產生,豐富的變化可以有效阻擋惡意交互。
      • 在這裏插入圖片描述

方案分析

  • 純本地組件、服務端放在接入平臺:可擴展比較少
  • 接入平臺,那就得提供一些獨特的服務,例如利用模型識別可疑行爲等
  • 環境檢測需要第三方的包來調用?
  • 體驗上來說,滑塊和動態語義的比較好,不需要鍵盤錄入,但是動態語義可能比較複雜,單純的語義(識別2D的數字+一些順序的)應該是可以實現的。

Demo

隨機數字圖片驗證碼方案

  • jsp+ajax+java,servlet
  • 來源於https://www.cnblogs.com/h–d/p/8258610.html
  • 基本思路:客戶端發出請求,調用後端生成驗證碼的方法,將值存在session中,並返回一張圖片;驗證邏輯也放在後端,讀入客戶的輸入,與session的值對比
  • 項目架構:在這裏插入圖片描述
  • 效果:
    在這裏插入圖片描述

滑動圖片驗證碼

  • 基本架構:google kaptcha+springboot

  • 滑動驗證碼原理

    • 服務器存有原始圖片、摳圖模板、摳圖邊框等圖片
    • 請求獲取驗證碼,服務器隨機獲取一張圖片,根據摳圖模板圖片在原圖中隨機生成x, y軸的矩形感興趣區域
    • 再通過摳圖模板在感興趣的區域圖片中摳圖,這裏會產生一張小塊的驗證滑塊圖
    • 驗證滑塊圖再通過摳圖邊框進行顏色處理,生成帶有描邊的新的驗證滑塊圖
    • 原圖再根據摳圖模板做顏色處理,這裏會產生一張遮罩圖(缺少小塊的目標圖)
    • 到這裏可以得到三張圖,一張原圖,一張遮罩圖。將這三張圖和摳圖的y軸座標通過base64加密,返回給前端,並將驗證的摳圖位置的x軸、y軸存放在session、db、nosql中
    • 前端在移動方塊驗證時,將移動後的x軸和y軸座標傳遞到後臺與原來的x座標和y軸座標作比較,如果 在閾值內則驗證通過,驗證通過後可以是給提示或者顯示原圖
    • 後端可以通過token、session、redis等方式取出存放的x軸和y軸座標數據,與用戶滑動的x軸和y軸進行對比驗證
  • https://gitee.com/gester/captcha &&https://blog.csdn.net/YTenderness/article/details/99969355

  • 效果:
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章