為簡訊驗證啟用 reCAPTCHA SMS defense
本文說明如何使用 reCAPTCHA SMS defense,保護 Identity Platform 的簡訊驗證流程 (例如手機和多重驗證),以免遭受簡訊費用詐欺 (又稱為垃圾簡訊攻擊)。這項整合功能有助於防止未經授權的簡訊流量對使用者和資源造成負面影響。
總覽
如果應用程式使用簡訊進行驗證,建議啟用 reCAPTCHA SMS defense 整合功能。啟用後,每當使用者透過下列 phoneProvider
作業,從應用程式或網站要求驗證簡訊時,Firebase 驗證和 Identity Platform 就會自動啟動 reCAPTCHA 簡訊防護功能:
作業 | 方法 | |
---|---|---|
使用電話號碼註冊或登入 | sendVerificationCode |
|
註冊 MFA 電話號碼 | mfaSmsEnrollment |
|
使用 MFA 電話號碼登入 | mfaSmsSignIn |
接著,reCAPTCHA 會提供 Firebase 驗證或 Identity Platform 風險分數,指出使用者電話號碼發生簡訊費用詐欺的可能性。然後與您設定的門檻比較。如果風險分數超過這個門檻,系統就不會傳送簡訊,有效阻擋詐欺行為。
如要瞭解 reCAPTCHA 簡訊防護分數的運作方式,請參閱「解讀分數」。
如要進一步瞭解 reCAPTCHA 簡訊防護功能,請參閱「偵測及防範簡訊詐欺」。
reCAPTCHA 電話驗證強制執行模式
您可以為 reCAPTCHA SMS defense 設定電話驗證強制執行功能,使用稽核或強制執行模式。
稽核模式
將電話驗證強制執行模式設為稽核模式時,Identity Platform 會使用 reCAPTCHA 簡訊防護機制驗證應用程式。如果使用者要求通過簡訊費用詐欺評估,系統就會傳送驗證碼簡訊。如果使用者要求未通過簡訊費用詐欺評估,且您使用用戶端 SDK,Identity Platform 會觸發備用驗證方法,完成電話驗證流程。可接受的回退方法取決於應用程式的平台。
在下列情況下,用戶端 SDK 會觸發備用驗證方法:
- 缺少 reCAPTCHA 權杖。
- reCAPTCHA 權杖無效或已過期。
- reCAPTCHA 權杖未通過分數門檻。
- reCAPTCHA 設定有誤。
請確保已為應用程式平台設定備用驗證方法,並視需要透過用戶端 SDK 觸發這些方法。
網頁
如果初步的詐騙電話評估失敗,稽核模式會依賴 reCAPTCHA v2 進行驗證。因此,您必須設定 reCAPTCHA 驗證器 (RecaptchaVerifier
),並將其傳遞至下列電話號碼驗證作業:
verifyPhoneNumber
signInWithPhoneNumber
linkWithPhoneNumber
reauthenticateWithPhoneNumber
auth/argument-error
。如要進一步瞭解如何設定 reCAPTCHA 驗證器,請參閱 Firebase 說明文件中的「設定 reCAPTCHA 驗證器」。
Android
如果初始詐騙電話評估失敗,稽核模式會根據 Play Integrity API 驗證您的應用程式。如果驗證失敗,系統會觸發 reCAPTCHA 第 2 版。 在下列情況下,系統可能會觸發 reCAPTCHA v2:
- 如果使用者的裝置未安裝 Google Play 服務。
- 如果應用程式不是透過 Google Play 商店發布 (適用於 Authentication SDK v21.2.0 以上版本)。
- 如果取得的 SafetyNet 權杖無效 (適用於 21.2.0 之前的 Authentication SDK 版本)。
iOS
如果初步的詐騙電話評估失敗,稽核模式會透過無聲推播通知進行驗證。這個驗證方法會透過無聲推送通知,將權杖傳送至要求裝置上的應用程式。如果應用程式成功收到通知,手機驗證流程就會繼續進行。如果應用程式未收到推送通知,系統會觸發 reCAPTCHA v2。如果無聲推送通知設定有誤,系統可能會觸發 reCAPTCHA 第 2 版。
如要進一步瞭解如何設定 iOS 應用程式驗證,請參閱 Firebase 說明文件中的「啟用應用程式驗證」。
強制執行模式
將電話驗證強制執行模式設為強制執行模式後,Identity Platform 會使用 reCAPTCHA 簡訊防護機制驗證應用程式。如果使用者要求通過簡訊費用詐欺評估,系統就會傳送驗證碼簡訊。如果使用者要求未通過簡訊費用詐欺評估,Identity Platform 會封鎖要求,不會傳送內含驗證碼的簡訊。
強制執行模式不需要備援驗證,因此您不必為應用程式設定任何額外的驗證方法。不過,我們建議為網頁應用程式設定 reCAPTCHA 驗證器,確保在您決定將應用程式的 reCAPTCHA 模式變更為 AUDIT
或 OFF
時,系統會啟用 reCAPTCHA v2。
事前準備
啟用 Identity Platform 的 reCAPTCHA SMS defense 前,請先完成下列工作:
視情況為應用程式或網站設定下列項目:
- 使用者透過電話號碼登入。
- 為網站、Android 或 iOS 應用程式啟用多重驗證。
視情況為應用程式或網站設定 Firebase 驗證:
啟用 reCAPTCHA SMS defense
設定驗證方法:
-
In the Google Cloud console, activate Cloud Shell.
建立服務身分:
gcloud beta services identity create \ --service=identitytoolkit.googleapis.com \ --project=PROJECT_ID
將
PROJECT_ID
替換為專案 ID。將
roles/identitytoolkit.serviceAgent
角色指派給您建立的服務身分。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-identitytoolkit.iam.gserviceaccount.com \ --role=roles/identitytoolkit.serviceAgent
更改下列內容:
PROJECT_ID
:專案 IDPROJECT_NUMBER
:專案帳戶號碼
-
為專案啟用 reCAPTCHA SMS defense:
前往 Google Cloud 控制台的 reCAPTCHA 頁面。
確認資源選取器中顯示專案名稱。
如果沒有看到專案名稱,請按一下資源選取器,然後選取專案。
按一下「設定」
。在「簡訊防禦」窗格中,按一下「設定」。
按一下「啟用」切換鈕,然後按一下「儲存」。
啟用 reCAPTCHA SMS defense 時,系統也會一併啟用帳戶防護工具 (如果尚未啟用)。
啟用 reCAPTCHA SMS defense 後,系統可能需要幾分鐘才能套用變更。傳播完畢後,您就會開始在評估中收到與 reCAPTCHA SMS defense 相關的回應。
如要為 Firebase 驗證或 Identity Platform 專案設定 reCAPTCHA SMS defense,請按照下列步驟操作:
在下列網址中,將
PROJECT_ID
、Recaptcha_MODE
和START_SCORE
替換為實際值:https://cloud.google.com/identity-platform/docs/reference/rest/v2/projects/updateConfig?apix_params={"name":"projects/PROJECT_ID/config","updateMask":"recaptchaConfig","resource":{"recaptchaConfig":{"emailPasswordEnforcementState":"OFF","phoneEnforcementState":"Recaptcha_MODE","useSmsTollFraudProtection":true,"tollFraudManagedRules":[{"action":"BLOCK","startScore":START_SCORE}]}}}
PROJECT_ID
:已啟用 Identity Platform 的專案 ID。Recaptcha_MODE
:您要為 reCAPTCHA 電話號碼驗證強制執行設定的模式。有效值為OFF
、AUDIT
和ENFORCE
。如要啟用 reCAPTCHA SMS defense,這個參數必須設為AUDIT
或ENFORCE
,且useSmsTollFraudProtection
必須設為true
。首次啟用 reCAPTCHA SMS defense 時,請使用
AUDIT
模式,確保 reCAPTCHA SMS defense 設定正常運作。AUDIT
模式僅供驗證。 這個模式無法防範未經授權的簡訊流量。確認「指標」資訊主頁未顯示任何失敗。驗證完成後,請立即啟用「ENFORCE
」模式。如要進一步瞭解模式的運作方式,請參閱「reCAPTCHA 手機驗證強制執行模式」START_SCORE
:要求失敗前可達到的最高電話費詐欺評估分數。您可以將這個分數設為介於0.1
和0.9
之間。建議您先從較高的門檻開始,例如0.8
,然後逐步降低分數。如果分數高於您設定的門檻,系統就會將其視為簡訊詐欺。將分數設為 1.0 會停用詐欺防護功能,而設為 0.0 則會封鎖所有簡訊。分數越低,規則越嚴格。 舉例來說,如果將門檻設為0.3
,reCAPTCHA 就會拒絕分數為0.4
以上的要求。
在已登入 Google Cloud 控制台的新瀏覽器視窗中輸入網址。
如果您在網頁或 Android 上使用 Identity Platform,請從 Firebase 控制台註冊應用程式:
如果是 Android,請註冊每個使用 Identity Platform 的 Android 套件名稱。
如果是網站,請為每個使用 reCAPTCHA 的網域新增授權網域:
前往 Google Cloud 控制台的「Identity Platform」頁面。
依序前往「設定」>「安全性」。
按一下「新增網域」。
輸入網域名稱,然後按一下「新增」儲存網域。
佈建 reCAPTCHA 金鑰可能需要幾分鐘的時間。
驗證設定:
擷取 reCAPTCHA 設定詳細資料:
{replace-your-project}
,搭配projectId
或projectNumber
使用。 在側邊面板中執行GetConfig
API,擷取 reCAPTCHA 設定。確認 reCAPTCHA SMS defense 設定正確無誤:
如果 reCAPTCHA 設定正確,回應必須包含下列欄位和指定值:
recaptchaKeys
:欄位不得為空白,且至少須為下列其中一個平台設定:iOS、網頁或 Android。useSmsTollFraudProtection
:這個欄位的值必須設為true
。phoneEnforcementState
:這個值必須設為ENFORCE
或AUDIT
。tollFraudManagedRules
:在這個欄位中,startScore
必須設定為您選擇的門檻,且值必須介於 0 和 0.9 之間。
否則,請重新設定 reCAPTCHA SMS defense。
回應範例
{ "recaptchaConfig": { "recaptchaKeys": [ { "key": "projects/{your-project}/keys/{recaptcha-key}", "type": "WEB" }, { "type": "IOS" }, { "type": "ANDROID" } ], "phoneEnforcementState": "ENFORCE", "tollFraudManagedRules": [ { "startScore": 0.8, "action": "BLOCK" } ], "useSmsTollFraudProtection": true } } ```
請確認 SDK 版本正確無誤。
網頁版
更新至最新版網頁 SDK。
- JavaScript SDK 9.20.0 以上版本支援在網頁應用程式中,使用 reCAPTCHA 進行電子郵件和密碼驗證。
- 如要在網頁應用程式中透過 reCAPTCHA 支援電話號碼驗證,請使用 JavaScript SDK 11 以上版本。
將網頁 SDK 整合至應用程式後,SDK 會自動擷取 reCAPTCHA 設定,並為您設定的供應商啟用保護機制。
Android
更新至最新版 Android SDK。Android SDK 23.1.0 以上版本支援在 Android 應用程式中,對電子郵件和密碼驗證以及電話驗證使用 reCAPTCHA。
此外,reCAPTCHA 支援功能需要 API 級別 23 (Marshmallow) 以上版本,以及 Android 6 以上版本。
將 Android SDK 整合至應用程式後,SDK 會自動擷取 reCAPTCHA 設定,並對您設定的供應商強制執行門檻。
在應用程式層級
build.gradle
檔案的依附元件區段中新增下列建構規則:implementation 'com.google.android.recaptcha:recaptcha:18.5.1'
請務必使用 reCAPTCHA SDK 18.5.1 以上版本。
iOS
- 更新至 iOS SDK 11.6.0 以上版本。
將 iOS SDK 整合至應用程式後,SDK 會自動擷取 reCAPTCHA 設定,並強制執行您為已設定的供應商設定的門檻。
如要將 reCAPTCHA iOS SDK 整合至應用程式,請參閱「準備 iOS 環境」。
如要確認
-ObjC
是否列在連結器標記中,請依序前往「Target」>「Build Settings」>「All」>「Linking」,然後確認Other Linker Flags
顯示-ObjC
。
監控 reCAPTCHA SMS defense 的 reCAPTCHA 指標
監控專案發出的 reCAPTCHA 指標,確認簡訊驗證流程受到保護。舉例來說,這些指標可協助您判斷是否已正確設定 Identity Platform 與 reCAPTCHA Enterprise API 的整合。此外,您也可以根據這些記錄檔,調整使用者流量的分數門檻。
如要確認 reCAPTCHA SMS defense 功能是否正常運作,請檢查專案傳送至 Cloud Monitoring 的下列指標:
identitytoolkit.googleapis.com/recaptcha/verdict_count
identitytoolkit.googleapis.com/recaptcha/token_count
identitytoolkit.googleapis.com/recaptcha/sms_tf_risk_scores
詳情請參閱「監控 reCAPTCHA 指標」。
強制執行 reCAPTCHA SMS defense
確認應用程式收到可接受的使用者流量後,請啟用 reCAPTCHA ENFORCE
模式,主動封鎖詐欺要求,保護使用者。
如要為專案或租戶啟用簡訊驗證流程的 ENFORCE
模式,請使用 Google APIs Explorer 更新專案設定,方法是在已登入 Google Cloud 控制台的新瀏覽器視窗中輸入下列 HTTP 網址:
https://cloud.google.com/identity-platform/docs/reference/rest/v2/projects/updateConfig?apix_params={"name":"projects/PROJECT_ID/config","updateMask":"recaptchaConfig","resource":{"recaptchaConfig":{"phoneEnforcementState":"ENFORCE","useSmsTollFraudProtection":"true"}}}
將 PROJECT_ID
替換為專案 ID。
搭配使用 reCAPTCHA SMS defense 和機器人防護功能
您可以同時使用 reCAPTCHA SMS defense 和機器人防護功能。如果設定同時使用這兩項保護功能,請注意下列事項:
- 將電話驗證強制執行狀態設為
AUDIT
後,只要滿足至少一項評估條件,Identity Platform 就會傳遞要求。建議您監控 reCAPTCHA 指標,確認 reCAPTCHA 簡訊防護和機器人防護都已設定合理的分數。 - 將電話驗證強制執行狀態設為
ENFORCE
時,只有在要求同時通過評估,且要求失敗關閉時不會改用其他驗證方法,Identity Platform 才會傳遞要求。
如要同時啟用這兩項功能,請使用 Google APIs Explorer 更新專案設定:
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE_MODE',
useSmsTollFraudProtection: true,
useSmsBotScore: true
}
將 ENFORCE_MODE
替換為要為 reCAPTCHA 電話驗證強制執行設定的模式。有效值為 OFF
、AUDIT
和 ENFORCE
。首次啟用 reCAPTCHA 簡訊防護功能時,建議將這個參數設為 AUDIT
,並確保驗證流程受到保護,再將這個參數設為 ENFORCE
。如要進一步瞭解模式運作方式,請參閱「reCAPTCHA 電話驗證強制執行模式」。
使用機器人防護功能時停用 reCAPTCHA SMS defense
如果您同時使用 reCAPTCHA SMS defense 和機器人防護功能,且想停用 reCAPTCHA SMS defense 但不停用機器人防護功能,請使用 Google APIs Explorer 更新專案設定:
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE_MODE',
useSmsTollFraudProtection: 'false',
useSmsBotScore: 'true'
}
將 ENFORCE_MODE
替換為您先前為 reCAPTCHA 電話驗證強制執行設定的模式。這個值應為 AUDIT
或 ENFORCE
。如要進一步瞭解模式運作方式,請參閱「reCAPTCHA 電話驗證強制執行模式」。
停用 reCAPTCHA SMS defense
如要停用 reCAPTCHA SMS 防護機制,請使用 Google APIs Explorer 更新專案設定,方法是在已登入 Google Cloud 控制台的新瀏覽器視窗中,輸入下列 HTTP 網址:
https://cloud.google.com/identity-platform/docs/reference/rest/v2/projects/updateConfig?apix_params={"name":"projects/PROJECT_ID/config","updateMask":"recaptchaConfig","resource":{"recaptchaConfig":{"phoneEnforcementState":"OFF","useSmsTollFraudProtection":"false"}}}
將 PROJECT_ID
替換為專案 ID。
如要在使用機器人防護功能時停用 reCAPTCHA SMS defense,請參閱「在使用機器人防護功能時停用 reCAPTCHA SMS defense」。
後續步驟
- 進一步瞭解 reCAPTCHA 簡訊防護功能。