使用詐欺防範功能保護付款交易

本頁面說明如何使用 reCAPTCHA Fraud Prevention,有效防範付款交易遭到攻擊,例如卡片測試、卡片竊取詐欺和帳戶盜用付款詐欺。

reCAPTCHA Fraud Prevention 可協助您識別針對性的人為攻擊和大規模詐欺行為,防範付款交易出現這類情形。系統會自動訓練行為和交易模型,找出可能為詐欺的事件,如果接受這類事件,可能會導致爭議或退款。

reCAPTCHA Fraud Prevention 會檢查交易信號,以便偵測詐欺行為。舉例來說,如果有人嘗試以低價購買商品,可能代表遭到盜刷攻擊。在回應中,您會收到不同類型詐欺的風險分數,可用於將交易送交人工審查,或直接封鎖可疑交易。

如要設定 reCAPTCHA Fraud Prevention,請完成下列步驟:

  1. 準備環境

  2. 在 Google Cloud 專案中啟用 reCAPTCHA Fraud Prevention

  3. 在付款前端安裝 reCAPTCHA JavaScript,方法是安裝以分數為準的 reCAPTCHA 金鑰

    執行 JavaScript 時,reCAPTCHA 會為每個使用者工作階段產生專屬的 reCAPTCHA 權杖,並收集使用者行為資料來評估使用者。

  4. 從後端提交建立評估 API 要求,並在付款流程中提供使用者事件的交易資料

    在建立評估作業 API 要求的相關回應中,reCAPTCHA 會提供交易風險分數和額外原因代碼 (例如 suspected_carding,如適用)。

  5. 根據分數判斷使用者的下一步動作

    您可以選擇允許交易、要求額外驗證、轉送手動審查,或封鎖交易。

事前準備

  1. 如果您是 reCAPTCHA 新手,請按照下列步驟操作:

    1. 在 Google Cloud 專案中設定 reCAPTCHA。

    2. 建立計分型 reCAPTCHA 金鑰

  2. 請確認您的環境支援大於 8 KB 的權杖,因為 reCAPTCHA Fraud Prevention 可能會使用較大的權杖。

啟用 reCAPTCHA Fraud Prevention

  1. 前往 Google Cloud 控制台的 reCAPTCHA 頁面。

    前往 reCAPTCHA

  2. 確認資源選取器中顯示專案名稱。

    如果沒有看到專案名稱,請按一下資源選取器,然後選取專案。

  3. 按一下「設定」

  4. 在「Fraud Prevention」(詐欺防範) 窗格中,按一下「Configure」(設定)

  5. 按一下「啟用」切換鈕,然後按一下「儲存」

在付款前端安裝 reCAPTCHA

如要開始偵測攻擊,請在付款使用者流程的各個頁面中安裝計分型 reCAPTCHA 金鑰。包括使用者查看購物車、選取付款方式及完成購買的介面。使用者在每個步驟中選取項目後,請呼叫 grecaptcha.enterprise.execute() 產生權杖。如要瞭解如何安裝分數制金鑰及呼叫 execute(),請參閱「安裝分數制金鑰」。

以下範例說明如何在信用卡交易事件中整合以分數為準的金鑰:

function submitForm() {
  grecaptcha.enterprise.ready(function() {
    grecaptcha.enterprise.execute(
      'reCAPTCHA_site_key', {action: 'purchase'}).then(function(token) {
       document.getElementById("token").value = token;
       document.getElementByID("paymentForm").submit();
    });
  });
}
<form id="paymentForm" action="?" method="POST">
  Total: $1.99
  Credit Card Number: <input name="cc-number" id="cc-number" autocomplete="cc-number"><br/>
  <input type="hidden" id="token" name="recaptcha_token"/>
  <button onclick="submitForm()">Purchase</button>
</form>
<script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>

您可以按一下程式碼視窗右上角的 <> 圖示,在 JSFiddle 中測試這個程式碼。

<html>
  <head>
    <title>Protected Payment</title>
    <script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>
    <script>
    function submitForm() {
      grecaptcha.enterprise.ready(function() {
        grecaptcha.enterprise.execute(
          'reCAPTCHA_site_key', {action: 'purchase'}).then(function(token) {
           document.getElementById("token").value = token;
           document.getElementByID("paymentForm").submit();
        });
      });
    }
    </script>
  </head>
  <body>
    <form id="paymentForm" action="?" method="POST">
      Total: $1.99
      Credit Card Number: <input name="cc-number" id="cc-number" autocomplete="cc-number"><br/>
      <input type="hidden" id="token" name="recaptcha_token"/>
      <button onclick="submitForm()">Purchase</button>
    </form>
  </body>
</html>

使用交易資料建立評估

如要啟用付款詐欺判定,請使用 projects.assessments.create 方法中的其他欄位,建立含交易資料的評估。

最簡單的整合方式包括 transaction_idpayment_methodcard_binvalue。為提升偵測品質,建議新增 emailbilling_address 等選填欄位。

{
  "event": {
    "token": "YOUR_TOKEN",
    "site_key": "KEY_ID",
    "expected_action": "YOUR_CHECKOUT_ACTION_NAME",
    "transaction_data": {
            "transaction_id": "txid-1234567890",
            "payment_method": "credit-card",
            "card_bin": "411111",
            "card_last_four": "1234",
            "currency_code": "USD",
            "value": 39.98,
            "user": {
                "email": "someEmailAddress@example.com"
            },
            "billing_address": {
                "recipient": "name1 name2",
                "address": [
                    "123 Street Name",
                    "Apt 1"
                ],
                "locality": "Sunnyvale",
                "administrative_area": "CA",
                "region_code": "USA",
                "postal_code": "123456"
            }
        }
    }
}

如要提高評分準確性,建議您傳送其他信號

如要瞭解如何建立評估,請參閱「為網站建立評估」。reCAPTCHA Fraud Prevention 可能會使用較大的權杖,因此請務必透過 POST 要求傳送要求,而非 GET;且要求應位於主體中,而非標頭中。

解讀評估結果

開始傳送交易資料後,您會收到評估結果,以 JSON 回應的形式呈現,並包含 riskAnalysis 中的 fraudPreventionAssessment 元件。

以下是回應範例:

{
  "event": {....
  ....
  }
  .....
  ....
  ....
"riskAnalysis": {
    "score": "0.5"
    "reasons": SUSPECTED_CARDING
}
"fraudPreventionAssessment": {
    "transactionRisk": 0.9,
}
}

您收到的回應中會有分數和原因代碼 (如適用)。分數越高,交易越有可能是有風險的詐欺活動;分數越低,交易越有可能屬於正當活動。舉例來說,0.9 分代表交易較有可能屬於有風險的詐欺活動,0.1 分則代表交易較有可能屬於正當活動。

您必須為根據評估結果採取的行動負責。 如要進行最簡單的整合,您可以設定 transactionRisk 的門檻, 做為決策依據。舉例來說,這項資訊有助於將可疑的詐欺交易送交人工審查,或直接拒絕這類交易。您也可以在自己的詐欺工作流程中使用分數,或將分數納入現有系統的規則。reCAPTCHA 會檢查獨特的信號,並掌握整個網路上獨特的行為可視度,因此即使您已擁有成熟的詐欺偵測引擎,仍可望獲得額外價值。

每個分數區間都經過校正,可達到最高偽陽性率,也就是可能遇到額外阻礙的合法使用者比例上限。您需要選取的門檻取決於業務需求。以下列舉幾個使用 transactionRisk 分數的範例:

風險容忍度 建議閾值 偽陽率上限 應用實例
0.5 5% 接受交易前,必須進行額外驗證,例如雙重驗證
0.7 1% 將交易送交人工審查
0.9 0.1% 拒絕交易

後續步驟