# 第 3 篇:Google reCAPTCHA Enterprise 深入解析
## 前言:通用人機識別的第一道防線
在上一篇文章中,我們了解了三大驗證機制的整體定位。現在讓我們深入探討第一層防護:**Google reCAPTCHA Enterprise**。作為跨平台通用的人機識別服務,它是所有應用的基礎防線。
## reCAPTCHA 的演進歷程
### 從 CAPTCHA 到無感知驗證
```
CAPTCHA 技術演進:
├── 第一代 CAPTCHA (2000年代初)
│ ├── 扭曲文字識別
│ ├── 使用者體驗差
│ └── 易被 OCR 破解
│
├── reCAPTCHA v1 (2007)
│ ├── 數位化書籍文字
│ ├── 雙重文字驗證
│ └── 仍需使用者輸入
│
├── reCAPTCHA v2 (2014)
│ ├── 「我不是機器人」勾選框
│ ├── 圖片識別挑戰
│ └── 內部使用風險分析(但不對外暴露分數)
│
├── reCAPTCHA v3 (2018)
│ ├── 完全無感知驗證
│ ├── 風險分數 (0.0-1.0)
│ └── 無需使用者互動
│
└── reCAPTCHA Enterprise (2020)
├── 整合 v2 和 v3 優點
├── 企業級功能
├── SMS Defense
└── 詳細分析報告
```
**核心理念轉變:**
- 從「挑戰-回應」到「行為分析」
- 從「明確驗證」到「無感知評分」
- 從「二元判斷」到「風險量化」
## reCAPTCHA Enterprise 核心概念
### 1. 風險評分機制
reCAPTCHA 的核心是**風險分數系統**,而非簡單的通過/失敗:
```
風險分數 (0.0 - 1.0):
├── 1.0 - 很可能是真人
├── 0.9-1.0 - 高度可信
├── 0.7-0.9 - 可能是真人
├── 0.3-0.7 - 可疑活動
└── 0.0-0.3 - 很可能是機器人
評分考量維度:
├── 行為模式分析
│ ├── 滑鼠移動軌跡
│ ├── 鍵盤輸入節奏
│ ├── 觸控模式(移動裝置)
│ └── 頁面互動時序
│
├── 環境指紋識別
│ ├── 瀏覽器特徵
│ ├── 作業系統資訊
│ ├── 螢幕解析度
│ └── Canvas fingerprinting
│
├── 歷史行為關聯
│ ├── IP 信譽評估
│ ├── 裝置歷史記錄
│ └── Google 生態系整合
│
└── 機器學習模型
├── 實時模式識別
├── 異常行為偵測
└── 自適應學習
```
**重要概念:**
- **非二元判斷**:不是單純的「通過」或「失敗」
- **動態閾值**:不同業務場景使用不同的分數閾值
- **持續學習**:模型會隨時間和攻擊手法演進而更新
### 2. Action 概念
reCAPTCHA 使用 **Action** 來區分不同的業務操作:
```
Action 設計理念:
├── 每個業務操作定義一個 action
├── 不同 action 有不同的分數分布
└── 便於分析和監控特定操作
常見 Action 範例:
├── 'login' - 登入操作
├── 'register' - 註冊操作
├── 'submit_form' - 表單提交
├── 'send_sms' - 發送簡訊
└── 'purchase' - 購買交易
```
**為什麼需要 Action?**
- 不同操作的正常行為模式不同
- 便於針對特定操作調整閾值
- 幫助分析哪些操作最容易被攻擊
### 3. SMS Defense 功能
SMS Defense 是 reCAPTCHA Enterprise 的特殊功能,專門防護簡訊相關的詐騙:
```
SMS Defense 防護目標:
├── SMS Toll Fraud (高費率簡訊詐騙)
│ └── 攻擊者使用特定號碼收取高額費用
├── SMS Pumping (簡訊灌水)
│ └── 大量發送 OTP 以賺取簡訊費用分成
└── 虛擬號碼偵測
└── 識別臨時號碼和虛擬號碼服務
風險等級:
├── HIGH_RISK - 高風險號碼,建議拒絕
├── MEDIUM_RISK - 中風險,建議額外驗證
└── LOW_RISK - 正常號碼
```
**使用場景:**
- OTP 驗證碼發送前
- 手機號碼註冊時
- 忘記密碼流程
## reCAPTCHA 工作流程
### 基本流程概念
```mermaid
sequenceDiagram
participant U as User
participant C as Client (Web/App)
participant S as Your Server
participant G as Google reCAPTCHA
U->>C: 執行操作 (如登入)
C->>G: 請求 token (含 action)
G->>G: 分析使用者行為
G->>C: 返回 token
C->>S: 提交請求 + token
S->>G: 驗證 token
G->>S: 返回風險分數
S->>S: 根據分數決策
S->>C: 返回結果
```
**關鍵步驟:**
1. **客戶端生成 token**:在操作發生時向 Google 請求
2. **行為分析**:Google 在背景分析使用者行為
3. **伺服器驗證**:後端向 Google 驗證 token 並獲取分數
4. **業務決策**:根據分數和業務邏輯做出決定
### Token 的生命週期
```
Token 特性:
├── 單次使用:每個 token 只能驗證一次
├── 有效期限:通常 2 分鐘內有效
├── Action 綁定:包含產生時的 action 資訊
└── 防重放:Google 會追蹤已使用的 token
```
## 分層處理策略
### 動態閾值概念
不同的業務操作應該使用不同的風險閾值:
```
閾值設計原則:
├── 低風險操作 (閾值 0.1-0.3)
│ ├── 瀏覽公開內容
│ └── 搜尋功能
│
├── 中風險操作 (閾值 0.5-0.6)
│ ├── 提交評論
│ ├── 表單填寫
│ └── 一般登入
│
├── 高風險操作 (閾值 0.7-0.8)
│ ├── 註冊新帳號
│ ├── 發送 OTP
│ └── 忘記密碼
│
└── 敏感操作 (閾值 0.8-0.9)
├── 修改密碼
├── 變更信箱
└── 金融交易
```
### 分層回應機制
根據分數範圍採取不同的處理方式:
```
回應策略:
├── 高分 (0.7-1.0) - 直接允許
│ └── 正常處理業務邏輯
│
├── 中分 (0.3-0.7) - 額外挑戰
│ ├── 顯示 reCAPTCHA v2 圖片挑戰
│ ├── 要求簡訊驗證碼
│ └── 限制操作頻率
│
└── 低分 (0.0-0.3) - 拒絕或嚴格限制
├── 直接拒絕請求
├── 暫時封鎖 IP
└── 要求多因子驗證
```
**重要觀念:**
- 沒有絕對的「正確閾值」
- 需要根據業務特性和風險承受度調整
- 應該持續監控和優化
## 整合要點
### 平台支援
reCAPTCHA Enterprise 支援三大平台:
```
平台整合:
├── Web (網頁)
│ ├── JavaScript SDK
│ └── 適用於所有現代瀏覽器
│
├── Android
│ ├── 原生 SDK
│ └── 需要 Google Play Services
│
└── iOS
├── 原生 SDK
└── Swift/Objective-C 支援
```
### 客戶端整合概念
**Web:**
```javascript
// 概念:在使用者操作時請求 token
grecaptcha.enterprise.execute('SITE_KEY', {action: 'login'})
.then(token => {
// 將 token 連同表單一起發送到後端
});
```
**關鍵點:**
- 在**真實使用者操作發生時**請求 token
- 不要在頁面載入時就請求(會降低準確性)
- Action 名稱要有意義且一致
### 後端驗證概念
```
後端驗證流程:
1. 接收客戶端傳來的 token
2. 呼叫 Google API 驗證 token
3. 檢查驗證結果:
├── Token 是否有效
├── Action 是否匹配
├── 風險分數多少
└── 是否有 SMS 風險評估(若適用)
4. 根據分數做出業務決策
```
**重要提醒:**
- **絕對不要**在客戶端做分數判斷
- Token 驗證**必須**在後端進行
- 驗證結果包含很多資訊,不只是分數
## 監控與優化
### 分數分布分析
```
正常分數分布應該呈現:
├── 大部分請求分數在 0.7 以上
├── 少量分數在 0.3-0.7(可疑但可能是真人)
└── 極少數分數在 0.3 以下
異常訊號:
├── 突然大量低分請求 → 可能遭受攻擊
├── 平均分數持續下降 → 需要調查原因
└── 特定 action 分數異常 → 該功能被針對性攻擊
```
### 常見低分原因
```
合法使用者可能低分的原因:
├── 使用 VPN/Proxy
├── 公司網路環境(共用 IP)
├── 瀏覽器隱私模式
├── 安裝廣告攔截器
├── 網路環境不穩定
└── 自動填充工具
真實攻擊的特徵:
├── 大量相同模式的請求
├── 短時間內重複相同操作
├── 異常的互動速度
└── 可疑的環境指紋
```
## 與其他機制的配合
### reCAPTCHA 的定位
```
三層防護中的角色:
第一層:reCAPTCHA Enterprise
├── 防護:基本機器人、腳本攻擊
├── 優勢:通用、快速、跨平台
└── 局限:無法驗證應用程式完整性
第二層:平台專屬驗證
├── Play Integrity (Android)
└── App Attest (iOS)
第三層:業務邏輯驗證
```
**組合使用建議:**
- 所有請求都使用 reCAPTCHA(第一層)
- 高風險操作加上平台專屬驗證(第二層)
- 始終保持業務邏輯驗證(第三層)
## 總結
### reCAPTCHA Enterprise 的核心價值
**優勢:**
✅ 快速部署,簡單整合
✅ 跨平台統一方案(Web/Android/iOS)
✅ 無感知使用者體驗(v3)
✅ Google 生態系大數據優勢
✅ SMS Defense 防護簡訊詐騙
✅ 持續演進的機器學習模型
**適用場景:**
- 通用的人機識別需求
- 跨平台一致性要求高的應用
- 需要快速部署防護的專案
- SMS/OTP 發送保護
- 公開網站基礎防護
**局限性:**
❌ 無法防範模擬器攻擊
❌ 無法驗證應用程式完整性
❌ 對破解應用無效
❌ 隱私考量(數據傳送給 Google)
❌ 需要網路連接到 Google 服務
### 關鍵概念回顧
1. **風險分數而非二元判斷**:理解分數的含義和使用方式
2. **Action 概念**:為不同操作定義 action 並分別監控
3. **動態閾值**:根據業務場景調整分數閾值
4. **分層處理**:根據分數採取不同的回應策略
5. **持續監控**:觀察分數分布和異常模式
---
在下一篇文章中,我們將深入探討 **Google Play Integrity**,了解 Android 平台如何進行更深層次的完整性驗證。
## 參考資源
- [reCAPTCHA Enterprise 官方文件](https://cloud.google.com/recaptcha-enterprise/docs)
- [reCAPTCHA 最佳實務指南](https://cloud.google.com/recaptcha-enterprise/docs/best-practices)
- [SMS Defense 文件](https://cloud.google.com/identity-platform/docs/recaptcha-tfp)
- [分數解讀指南](https://cloud.google.com/recaptcha-enterprise/docs/interpret-assessment)