本文說明如何使用 SMS Defense,在依賴簡訊進行雙重驗證 (2FA) 或電話號碼驗證的商家中,偵測及防範簡訊灌水攻擊,避免商家成為簡訊費用詐欺的潛在目標。
簡訊驗證機制 (雙重驗證和登入) 是登入和註冊安全性的業界標準,但無法防範簡訊費用詐欺或垃圾簡訊詐欺。簡訊防護功能會在您傳送簡訊前提供風險分數,指出該電話號碼涉及簡訊費用詐欺的可能性。根據這項分數,您可以在詐欺簡訊傳送給簡訊服務供應商之前,允許或封鎖這類訊息。
簡訊防護風險分數與 reCAPTCHA 全域分數的運作方式相反。簡訊防護風險分數為 0.0 表示簡訊費用詐欺的發生機率低;風險分數為 1.0 表示簡訊費用詐欺的發生機率高。如要進一步瞭解 reCAPTCHA 分數,請參閱「解讀網站評估結果」。如果您使用 Firebase 驗證或 Identity Platform,請參閱 Identity Platform 說明文件。
詳情請參閱「SMS defense blog」。
事前準備
請根據您是 reCAPTCHA 現有使用者還是新使用者,按照適當分頁中的操作說明進行:
現有 reCAPTCHA 使用者
如果您是 reCAPTCHA 現有使用者,請在 Google Cloud 專案中啟用 SMS defense:
前往 Google Cloud 控制台的 reCAPTCHA 頁面。
確認專案名稱顯示在資源選取器中。
如果沒有看到專案名稱,請按一下資源選取器,然後選取專案。
按一下「設定」。
在「SMS Defense」窗格中,按一下「設定」。
按一下「啟用」切換鈕,然後按一下「儲存」。
啟用簡訊防護功能後,系統可能需要幾分鐘才會套用變更。功能啟用設定傳播至系統後,您應該就會在評估結果中收到與 SMS Defense 相關的回應。
新 reCAPTCHA 使用者
如果您是 reCAPTCHA 新手,請按照下列步驟操作:
-
如要在網站或行動應用程式上使用 SMS Defense 功能,請按照下列步驟整合 reCAPTCHA:
網站
行動應用程式
- 為行動應用程式建立以分數為準的金鑰。
- 將 reCAPTCHA 整合至 iOS 應用程式或 Android 應用程式
- 在 Google Cloud 專案中啟用 SMS defense:
前往 Google Cloud 控制台的 reCAPTCHA 頁面。
確認專案名稱顯示在資源選取器中。
如果沒有看到專案名稱,請按一下資源選取器,然後選取專案。
按一下「設定」。
在「SMS Defense」窗格中,按一下「設定」。
按一下「啟用」切換鈕,然後按一下「儲存」。
啟用簡訊防護功能後,系統可能需要幾分鐘才會套用變更。功能啟用設定傳播至系統後,您應該就會在評估結果中收到與 SMS Defense 相關的回應。
使用電話號碼建立評估
如要防範 SMS Defense,請使用 reCAPTCHA 用戶端程式庫或後端的 REST API,透過 execute() 函式產生的權杖和電話號碼建立評估。
本文說明如何使用 REST API 建立評估。如要瞭解如何使用用戶端程式庫建立評估作業,請參閱「建立評估作業」。
建立評估前,請先完成下列工作:
設定 Fraud Defense 的驗證機制。
驗證方法取決於 Fraud Defense 的設定環境。下表可協助您選擇適當的驗證方法和支援的介面,以設定驗證:
環境 介面 驗證方式 Google Cloud - REST
- 用戶端程式庫
使用附加的服務帳戶。 地端部署或其他雲端服務供應商 REST 使用 API 金鑰或 Workload Identity 聯盟。 如要使用 API 金鑰,建議您套用 API 金鑰限制,確保 API 金鑰安全無虞。
用戶端程式庫 使用下列設定:
- 如果是 Python 或 Java,請使用 API 金鑰或 Workload Identity Federation。
如要使用 API 金鑰,建議您套用 API 金鑰限制,確保 API 金鑰安全無虞。
- 如為其他語言,請使用 Workload Identity 聯盟。
選擇使用者不會經常變更的穩定帳戶 ID
accountId,並在projects.assessments.create方法中提供給評估作業。對於與同一位使用者相關的所有事件,這個穩定帳戶 ID 的值應相同。您可以提供下列資訊做為帳戶 ID:使用者 ID
如果每個帳戶都能與穩定的使用者名稱、電子郵件地址或電話號碼建立專屬關聯,您就可以將這些資訊做為
accountId。當您提供這類跨網站 ID (可在不同網站重複使用的 ID) 時,Fraud Defense 會使用這項資訊,根據跨網站模型標記濫用帳戶 ID,並運用與這些 ID 相關的跨網站濫用模式知識,加強保護使用者帳戶。或者,如果每個帳戶都有專屬的內部使用者 ID,您可以將該 ID 提供為
accountId。雜湊處理或加密
如果沒有與每個帳戶唯一相關聯的內部使用者 ID,您可以將任何穩定 ID 轉換為不透明的網站專屬帳戶 ID。Fraud Defense 帳戶防護工具仍需使用這個 ID,才能瞭解使用者活動模式並偵測異常行為,但這個 ID 不會與其他網站共用。
選取任何穩定的帳戶 ID,並使用加密或雜湊函式,在傳送至 Fraud Defense 前將其設為不透明:
加密 (建議):使用確定性加密方法加密帳戶 ID,產生穩定的密文。如需詳細操作說明,請參閱「以決定性方式加密資料」。選擇對稱式加密而非雜湊處理時,您不需要保留使用者 ID 與對應不透明使用者 ID 之間的對應關係。解密 Fraud Defense 傳回的不透明 ID,將其轉換為使用者 ID。
雜湊處理:建議使用 SHA256-HMAC 方法,並搭配您選擇的自訂鹽值,對帳戶 ID 進行雜湊處理。由於雜湊值只能單向轉換,您必須保留產生的雜湊值與使用者 ID 之間的對應關係,才能將傳回的雜湊帳戶 ID 對應回原始帳戶。
在 projects.assessments.create 方法中,新增 accountId 參數和 E.164 格式的電話號碼做為 UserId,以便在評估中驗證。
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_ID:您的 Google Cloud 專案 ID。
- TOKEN:從
grecaptcha.enterprise.execute()呼叫傳回的權杖。 - KEY_ID:您在網站上安裝的評分式金鑰。
- ACCOUNT_ID:網站專屬的使用者帳戶 ID。
- PHONE_NUMBER:需要檢查是否惡意的電話號碼。電話號碼必須採用 E.164 格式,且不得經過雜湊處理或加密。
HTTP 方法和網址:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
JSON 要求內文:
{
"event": {
"token": "TOKEN",
"siteKey": "KEY_ID",
"userInfo": {
"accountId": "ACCOUNT_ID",
"userIds": [
{
"phoneNumber": "PHONE_NUMBER"
}
]
}
}
}
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments"
PowerShell
將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments" | Select-Object -Expand Content
您應該會收到如下的 JSON 回覆:
{
"event": {
…
},
"name": "ASSESSMENT_ID",
"phoneFraudAssessment": {
"smsTollFraudVerdict": {
"risk": 0.3
}
}
}
您收到的回應中會有 phoneFraudAssessment.smsTollFraudVerdict 欄位的 risk 分數。分數越高,電話號碼越有可能有風險;分數越低,電話號碼越有可能屬於正當活動。
您必須為根據評估結果採取的行動負責。
如要進行最簡單的整合,您可以在 phoneFraudAssessment.smsTollFraudVerdict.risk 上設定門檻,以協助做出決策。
為評估結果加上註解
為追蹤簡訊流量及提升詐欺偵測能力,您必須在簡訊傳送後或電話號碼驗證成功後 10 分鐘內,註解評估結果。
如要加註評估,請使用評估 ID,向 projects.assessments.annotate 方法傳送要求。在該要求的內文中,以 E.164 格式在 phoneAuthenticationEvent 欄位中加入電話號碼。
如要為評估作業加上註解,請按照下列步驟操作:
根據您的用途,決定要在要求 JSON 主體中新增的資訊和標籤。
下表列出可用於註解事件的標籤和值:
標籤 說明 要求範例 reasons這是必要旗標,可協助您進行評估的標籤。
在活動發生後幾秒或幾分鐘內,於
reasons標籤中提供即時活動詳細資料,因為這些資料會影響即時偵測。可能的值包括:
INITIATED_TWO_FACTOR:系統會透過簡訊傳送驗證碼。PASSED_TWO_FACTOR:驗證碼已成功通過驗證。FAILED_TWO_FACTOR:驗證碼無效。
{ "reasons": ["INITIATED_TWO_FACTOR"], "phoneAuthenticationEvent": { "phoneNumber": "+18005550175" } }annotation選用。標籤,用於指出評估的合法性。
提供登入和註冊事件的相關事實,以驗證或修正
annotation標籤中的風險評估。可能的值:
LEGITIMATE或FRAUDULENT。建議您在事件發生後幾秒或幾分鐘內傳送這項資訊,因為這會影響即時偵測。
{ "annotation": "LEGITIMATE" }使用適當的標籤建立註解要求。 <0x0A
使用任何要求資料之前,請先修改下列項目的值:
- ASSESSMENT_ID:從
projects.assessments.create呼叫傳回的name欄位值。 - ANNOTATION:選用。標籤,指出評估結果為正當或詐欺行為。
- REASONS:支援註解的原因。如需可能值的清單,請參閱原因值。
- PHONE_NUMBER:接受評估的電話號碼。電話號碼必須採用 E.164 格式,且不得經過雜湊處理或加密。
HTTP 方法和網址:
POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate
JSON 要求內文:
{ "annotation": ANNOTATION, "reasons": REASONS, "phoneAuthenticationEvent": { "phoneNumber": "PHONE_NUMBER" } }如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為
request.json的檔案中,然後執行下列指令:curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate"PowerShell
將要求主體儲存在名為
request.json的檔案中,然後執行下列指令:$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate" | Select-Object -Expand Content您應該會收到執行成功的狀態碼 (2xx) 和空白回應。
- ASSESSMENT_ID:從