圖形驗證碼
作用
- 圖形驗證碼的主要作用是強制進行人機交互,區分人和機器,以此來抵禦機器自動化攻擊。比如用戶登陸,則機器可以同時、大批量的發起請求,一來系統可能扛不住,二來機器可以不斷變換密碼來嘗試破解用戶的密碼,實現盜號。
基本邏輯
- 架構邏輯:
- 通過設定的規則(規則即指圖形生成的規則),將生成的校驗值存在服務端(廣義的,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
-
效果: