本文說明如何使用 reCAPTCHA 帳戶防護機制,偵測及防範網站上與帳戶相關的詐欺活動。
reCAPTCHA 可協助您保護重要動作,例如登入和結帳。不過,只要觀察特定使用者在網站上的行為一段時間,就能偵測到許多細微的帳戶濫用行為。reCAPTCHA 帳戶防護功能會為您的網站建立專屬模型,偵測可疑行為趨勢或活動變化,協助您找出這類細微的濫用行為。reCAPTCHA 帳戶防護工具會使用網站專屬模型,協助您偵測下列情況:
- 可疑活動
- 行為相似的帳戶
- 來自下列類型裝置的要求:已標為特定使用者信任的來源
根據 reCAPTCHA 帳戶防護工具和網站專屬模型的分析結果,您可以採取下列行動:
- 限制或停用詐欺帳戶。
- 防範帳戶盜用行為。
- 減少帳戶盜用得逞的案例。
- 只允許來自正當使用者帳戶的要求。
- 減少使用者透過信任的裝置登入時遇到的阻礙。
事前準備
為 reCAPTCHA 帳戶防護工具設定網頁
reCAPTCHA 帳戶防護工具需要全面瞭解帳戶活動,才能有效偵測。如要開始將帳戶相關活動提供給 reCAPTCHA 帳戶防護工具,以及建立及改善網站專用模型,請按照下列步驟操作:
啟用水平遙測資料收集功能
reCAPTCHA 帳戶防護功能需要完整檢視使用者動作,例如使用者是否已登入或即將登入。如要啟用 reCAPTCHA 帳戶防禦功能,被動收集水平遙測資料,請在使用者工作流程的所有網頁背景中,載入您建立的 reCAPTCHA JavaScript 指令碼和評分型網站金鑰。
以下範例說明如何在網頁中載入 reCAPTCHA JavaScript 指令碼。
<head> <script src="https://www.google.com/recaptcha/enterprise.js?render=KEY_ID"></script> .... </head>
製作重要使用者動作報表
如要偵測可疑活動模式,並進一步瞭解網站上的一般活動模式,reCAPTCHA 帳戶防護機制需要重要使用者動作的相關資訊。因此,請在網頁上發生重要使用者動作時呼叫 grecaptcha.enterprise.execute(),回報這些動作。
建議您回報所有重要的使用者動作,因為這有助於收集額外信號。如要回報每項使用者動作,請將 grecaptcha.enterprise.execute()
的 action
參數值,替換為描述使用者動作的動作名稱。
下表列出您在回報重要使用者動作時可使用的動作名稱。
動作名稱 | 使用者啟動的事件或使用者動作 |
---|---|
LOGIN |
登入網站。 |
REGISTRATION |
在網站上註冊。 |
SECURITY_QUESTION_CHANGE |
要求變更安全性問題。 |
PASSWORD_RESET |
要求重設密碼。 |
PHONE_NUMBER_UPDATE |
要求更新電話號碼。 |
EMAIL_UPDATE |
要求更新電子郵件地址。 |
ACCOUNT_UPDATE |
要求更新帳戶相關資訊,例如聯絡人詳細資料。 |
TRIGGER_MFA |
觸發 MFA 驗證的動作。 |
REDEEM_CODE |
要求兌換代碼。 |
LIST_PAYMENT_METHODS |
擷取付款方式清單。 |
以下範例說明如何在電話號碼更新時呼叫 grecaptcha.enterprise.execute()
:
<script> function onClick(e) { e.preventDefault(); grecaptcha.enterprise.ready(async () => { const token = await grecaptcha.enterprise.execute('KEY_ID', {action: 'PHONE_NUMBER_UPDATE'}); }); } </script>
評估重要使用者事件
在使用者動作中呼叫 grecaptcha.enterprise.execute()
時,系統會產生權杖。針對重要的使用者事件 (例如登入成功/失敗、註冊,以及登入使用者的動作),請建立評估,評估 grecaptcha.enterprise.execute()
呼叫的結果。評估結果會提供風險判定,您可以根據這項判定,決定如何處理可能涉及詐欺的活動。您可以採取下列行動:封鎖可疑要求、驗證高風險登入行為,以及調查感興趣的帳戶。
reCAPTCHA 帳戶防護機制需要您提供穩定的帳戶 ID,才能將使用者活動 (例如登入要求、已登入要求和註冊要求) 歸因於特定帳戶。這有助於 reCAPTCHA 帳戶防禦機制瞭解使用者活動模式,並為每個帳戶建立活動模型,以便更準確地偵測異常和濫用流量。
選擇使用者不會經常變更的穩定帳戶 ID accountId
,並在
projects.assessments.create
方法中提供給評估服務。對於與同一位使用者相關的所有事件,這個穩定帳戶 ID 的值應相同。您可以提供下列任一項做為帳戶 ID:
使用者 ID
如果每個帳戶都能與穩定的使用者名稱、電子郵件地址或電話號碼建立專屬關聯,您就可以將這些資訊做為 accountId
。當您提供這類跨網站 ID (可在不同網站重複使用的 ID) 時,reCAPTCHA 會使用這項資訊,根據跨網站模型標記濫用帳戶 ID,並運用與這些 ID 相關的跨網站濫用模式知識,提升使用者帳戶的防護能力。
或者,如果每個帳戶都有專屬的內部使用者 ID,您可以將該 ID 提供為 accountId
。
雜湊處理或加密
如果沒有與每個帳戶唯一相關聯的內部使用者 ID,您可以將任何穩定 ID 轉換為不透明的網站專屬帳戶 ID。reCAPTCHA 帳戶防護功能仍需使用這個 ID 瞭解使用者活動模式並偵測異常行為,但不會與其他網站共用。
挑選任何穩定的帳戶 ID,並使用加密或雜湊處理方式,在傳送至 reCAPTCHA 之前將其設為不透明:
加密 (建議):使用確定性加密方法加密帳戶 ID,產生穩定的密文。如需詳細操作說明,請參閱以決定性方式加密資料。選擇對稱加密而非雜湊處理時,您不需要保留使用者 ID 與對應不透明使用者 ID 之間的對應關係。解密 reCAPTCHA 傳回的不透明 ID,將其轉換為使用者 ID。
雜湊處理:建議使用 SHA256-HMAC 方法,並搭配您選擇的自訂鹽值,對帳戶 ID 進行雜湊處理。由於雜湊值只能單向轉換,您必須保留產生的雜湊值與使用者 ID 之間的對應關係,才能將傳回的雜湊帳戶 ID 對應回原始帳戶。
除了為所有帳戶相關要求提供穩定的帳戶 ID 之外,您還可以為某些特定要求提供其他帳戶 ID (可能不穩定)。除了 accountId
之外,您還可以提供特定情境的帳戶 ID,協助 reCAPTCHA 帳戶防護工具進一步瞭解使用者活動,並偵測帳戶盜用嘗試,確保使用者帳戶安全。提供額外 ID 時,reCAPTCHA 會根據跨網站模型,標記濫用帳戶 ID,並運用與這些 ID 相關的跨網站濫用模式知識,加強保護使用者帳戶。例如,您可以提供下列資訊:
用於登入要求的登入代碼,可以是使用者名稱、電子郵件地址或電話號碼
已通過驗證的電子郵件地址或電話號碼,用於多重驗證要求
使用者在帳戶更新要求中提供的電子郵件地址或電話號碼 (主要或次要)
使用者在註冊要求期間提供的電子郵件地址和電話號碼
在所有與帳戶相關的請求中,將所選的穩定帳戶 ID 附加至
projects.assessments.create
方法的 accountId
參數。選用:在評估中,使用 userIds
欄位為相關要求提供其他帳戶 ID。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的 Google Cloud 專案 ID
- TOKEN:從
grecaptcha.enterprise.execute()
呼叫傳回的權杖 - KEY_ID:與網站相關聯的 reCAPTCHA 金鑰
- ACCOUNT_ID:與使用者帳戶專屬關聯的 ID,可將使用者帳戶連結至網站
- EMAIL_ADDRESS:選用。與這項要求相關聯的電子郵件地址 (如有)
- PHONE_NUMBER:選用。與這項要求相關聯的電話號碼 (如有)
- USERNAME:選用。與這項要求相關聯的使用者名稱 (如有)
HTTP 方法和網址:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
JSON 要求主體:
{ "event": { "token": "TOKEN", "siteKey": "KEY_ID", "userInfo": { "accountId": "ACCOUNT_ID", "userIds": [ { "email": "EMAIL_ADDRESS" }, { "phoneNumber": "PHONE_NUMBER" }, { "username": "USERNAME" } ] } } }
如要傳送要求,請選擇以下其中一個選項:
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 回應:
{ "tokenProperties": { "valid": true, "hostname": "www.google.com", "action": "login", "createTime": "2019-03-28T12:24:17.894Z" }, "riskAnalysis": { "score": 0.6, }, "event": { "token": "TOKEN", "siteKey": "KEY", "userInfo": { "accountId": "ACCOUNT_ID" } }, "name": "projects/PROJECT_NUMBER/assessments/b6ac310000000000", "accountDefenderAssessment": { "labels": ["SUSPICIOUS_LOGIN_ACTIVITY"] } }
程式碼範例
Java
如要驗證 reCAPTCHA,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
解讀重大使用者事件的風險判定結果
啟用帳戶防護工具後建立評估時,帳戶防護工具會在評估回應中傳回 accountDefenderAssessment
。accountDefenderAssessment
的值有助於評估使用者活動屬於正當或詐欺行為。此外,這項作業也會傳回評估 ID,您必須在註解使用者事件時使用這個 ID。
以下是 JSON 回應範例:
{ "tokenProperties": { "valid": true, "hostname": "www.google.com", "action": "login", "createTime": "2019-03-28T12:24:17.894Z" }, "riskAnalysis": { "score": 0.6, }, "event": { "token": "TOKEN", "siteKey": "KEY_ID", "expectedAction": "USER_ACTION" }, "name": "projects/PROJECT_ID/assessments/b6ac310000000000X", "accountDefenderAssessment": { labels: ["SUSPICIOUS_LOGIN_ACTIVITY"] } }
accountDefenderAssessment
欄位可包含下列任一值:
值 | 說明 |
---|---|
SUSPICIOUS_LOGIN_ACTIVITY |
表示要求極有可能涉及憑證填塞或帳戶盜用。 |
SUSPICIOUS_ACCOUNT_CREATION |
表示要求代表高風險的濫用帳戶建立行為。 |
PROFILE_MATCH |
表示使用者的屬性與這位使用者先前看到的屬性相符。這個值表示使用者目前使用的裝置是先前用來存取您網站的信任裝置。 只有在下列情況下,系統才會傳回
|
RELATED_ACCOUNTS_NUMBER_HIGH |
表示要求有大量相關帳戶。 這不一定代表帳戶有問題,但可能需要進一步調查。 |
為事件加上註解,調整網站專屬模型
如要向 reCAPTCHA 帳戶防護工具提供更多資訊,並改善網站專屬的偵測模型,您必須建立評估,為評估的事件加上註解。
如要為評估加上註解,請使用評估 ID 將要求傳送至 projects.assessments.annotate
方法。在該要求的內文中,您會加入標籤,提供評估中所述事件的額外資訊。
如要為評估作業加上註解,請按照下列步驟操作:
-
根據您的用途,決定要在要求 JSON 主體中新增的資訊和標籤。
下表列出可用於註解事件的標籤和值:
標籤 說明 要求範例 reasons
這是必要旗標,支援評估作業的標籤。 在活動發生後幾秒或幾分鐘內,於
reasons
標籤中提供即時活動詳細資料,因為這些資料會影響即時偵測。如需可能值的清單,請參閱原因值。
示例:如要偵測帳戶遭盜用,請使用
CORRECT_PASSWORD
或INCORRECT_PASSWORD
值,為輸入的密碼是否正確加上註解。如果您部署了自己的 MFA,可以新增下列值:INITIATED_TWO_FACTOR
,以及PASSED_TWO_FACTOR
或FAILED_TWO_FACTOR
。{ "reasons": ["INCORRECT_PASSWORD"] }
annotation
(選用步驟) 用來指出評估作業是否合法。 提供登入和註冊事件的相關事實,以驗證或修正
annotation
標籤中的風險評估。可能的值:
LEGITIMATE
或FRAUDULENT
。您可以隨時傳送這項資訊,也可以將其納入批次作業。 不過,建議您在事件發生後幾秒或幾分鐘內傳送這項資訊,因為這會影響即時偵測。
{ "annotation": "LEGITIMATE" }
accountId
(選用步驟) 將帳戶 ID 與事件建立關聯的標籤。
如果您建立評估時沒有帳戶 ID,請使用這個標籤,在有活動帳戶 ID 時提供。
{ "accountId": "ACCOUNT_ID" }
使用適當的標籤建立註解要求。
使用任何要求資料之前,請先替換以下項目:
- ASSESSMENT_ID:從
projects.assessments.create
呼叫傳回的name
欄位值。 - ANNOTATION:選用。標籤,指出評估作業是否正當或有詐欺行為。
- REASONS:選用。支持註解的理由。如需可能值的清單,請參閱原因值。
- ACCOUNT_ID:選用。與網站上使用者帳戶相關聯的專屬 ID。
詳情請參閱註解標籤。
HTTP 方法和網址:
POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate
JSON 要求主體:
{ "annotation": ANNOTATION, "reasons": REASONS, "accountId": ACCOUNT_ID }
如要傳送要求,請選擇以下其中一個選項:
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:從
程式碼範例
Java
如要驗證 reCAPTCHA,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
啟用 reCAPTCHA 帳戶防護工具
為網頁設定 reCAPTCHA 帳戶防護工具後,即可啟用這項工具。
前往 Google Cloud 控制台的「reCAPTCHA」reCAPTCHA頁面。
確認頁面頂端的資源選取器中顯示了專案名稱。
如果沒有看到專案名稱,請按一下資源選取器,然後選取專案。
- 按一下「設定」 。
在「帳戶防禦」窗格中,按一下「設定」。
在「設定帳戶防護」對話方塊中,按一下「啟用」,然後按一下「儲存」。
啟用 reCAPTCHA 帳戶防護工具後,可能需要幾小時才能在系統中全面生效。這項功能啟用後,系統會開始在評估結果中提供與帳戶防禦相關的回應。