Fraud Prevention で支払いトランザクションを保護する

このページでは、reCAPTCHA の不正行為防止を使用して、カーディング、決済手段不正利用詐欺、アカウントの乗っ取りなどの不正行為から支払いトランザクションを効果的に保護する方法について説明します。

reCAPTCHA の不正行為防止は、標的型手動攻撃と大規模な不正行為の試みを特定することで、支払いトランザクションを保護するのに役立ちます。これにより行動やトランザクション モデルが自動的にトレーニングされ、不正行為である可能性が高く、承認された場合、紛争またはチャージバックにつながる可能性のあるイベントを特定できます。

これらのモデルの一部として、reCAPTCHA の不正行為防止は、トランザクション シグナルを調べて不正行為の検出を可能にします。たとえば、低価格での購入がたて続けに試みられた場合は、カーディング攻撃を示している可能性があります。レスポンスでは、さまざまな種類の不正行為に対するリスクスコアを確認できます。これにより、トランザクションを手動審査に送信するか、不審なトランザクションを直接ブロックできます。

reCAPTCHA の不正行為防止を設定するには、次の手順を行う必要があります。

  1. 環境を準備する

  2. Google Cloud プロジェクトで reCAPTCHA Fraud Prevention を有効にします

  3. フロントエンド デバイスからのシグナルを自動的に組み込む場合は [フロントエンドの統合] を選択し、フロントエンドで統合しない場合は [API のみの統合] を選択します。

    JavaScript が実行されると、reCAPTCHA はユーザー セッションごとに一意の reCAPTCHA トークンを生成し、ユーザーの行動データを収集してユーザーを評価します。

    API のみの統合では、必要な取引データのみを使用して判定が返されるため、このトークンは必要ありません。

  4. 以前に選択したフロントエンド統合またはAPI のみの統合を使用して、トランザクション データを含む create assessment API リクエストをバックエンドから送信します。

    create assessment API リクエストのレスポンスで、reCAPTCHA はトランザクション リスクのスコアと、妥当な場合、追加の説明可能性の理由(HIGH_TRANSACTION_VELOCITY など)を提供します。

  5. スコアに基づいてユーザーの次のアクションを決定します

    トランザクションを許可する、追加の確認を求める、手動審査に転送する、またはトランザクションをブロックすることを選択できます。

始める前に

  1. reCAPTCHA を初めて使用する場合は、次の操作を行います。

    1. Google Cloud プロジェクトで reCAPTCHA を構成します。

    2. スコアベースの reCAPTCHA キーを作成する

  2. フロントエンド統合を計画している場合は、reCAPTCHA の不正行為防止でより大きなトークンが使用される可能性があるため、環境で 8 kB を超えるトークンがサポートされていることを確認します。

reCAPTCHA 不正防止機能を有効にする

  1. Google Cloud コンソールで、[reCAPTCHA] ページに移動します。

    [reCAPTCHA] に移動

  2. リソース セレクタにプロジェクトの名前が表示されていることを確認します。

    プロジェクトの名前が表示されない場合は、リソース セレクタをクリックしてプロジェクトを選択します。

  3. [設定] をクリックします。

  4. [Fraud Prevention] ペインで [構成] をクリックします。

  5. [有効にする] 切り替えをクリックし、[保存] をクリックします。

フロントエンド統合 - ウェブサイトに reCAPTCHA をインストールする

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 メソッドの追加フィールドを使用して、トランザクション データで評価を作成します。

統合には、少なくとも payment_methodcard_bincard_last_four の各フィールドが必要です。検出品質を改善するには、emailphone_numberbilling_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 の不正行為防止では、より大きなトークンが使用される可能性があるため、リクエストが GET ではなく POST リクエストに、ヘッダーではなく本文に送信されることを確認します。

API のみの統合 - トランザクション データを使用して評価を作成する

支払いに関する不正行為の判定を受け取るには、projects.assessments.create メソッドの追加フィールドを使用して、トランザクション データで評価を作成します。

reCAPTCHA API 専用の統合では、提供されたトランザクション データのみを使用して不正行為防止評価が生成されるため、少なくとも次のものを提供する必要があります。

  1. 請求先住所 regionCodepostalCode
  2. 取引データ paymentMethod
  3. 次のいずれかになります。
{
  "event": {
    "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": {
                "account_id": "abcde12345",
                "email": "someEmailAddress@example.com",
                "phone_number": "+18005550175",
            },
            "billing_address": {
                "recipient": "name1 name2",
                "address": [
                    "123 Street Name",
                    "Apt 1"
                ],
                "locality": "Sunnyvale",
                "administrative_area": "CA",
                "region_code": "USA",
                "postal_code": "123456"
            }
        }
    }
}

スコアの品質を改善するには、できるだけ多くの入力を指定し、追加のシグナルも送信することをおすすめします。

評価を解釈する

トランザクション データの送信を開始すると、riskAnalysisfraudPreventionAssessment コンポーネントを含む JSON レスポンスとして評価が返されます。

レスポンスの例を次に示します。

{
  "event": {....
  ....
  }
  .....
  ....
  ....
"fraudPreventionAssessment": {
    "transactionRisk": 0.9,
    "riskReasons": HIGH_TRANSACTION_VELOCITY
}
}

レスポンスには、該当する場合はスコアと理由コードが含まれます。 スコアが高いほど、トランザクションが不正でリスクが高い可能性が高くなり、スコアが低いほど、トランザクションが正当である可能性が高くなります。たとえば、スコアが 0.9 はトランザクションが不正でありリスクが高いことを示し、スコアが 0.1 はトランザクションが正当である可能性が高いことを示します。

評価に基づいて実行するアクションは、お客様の責任となります。最も簡単な統合の場合、transactionRisk でしきい値を設定して判断に役立たせることができます。たとえば、手動審査に送信することや、不正行為の可能性のあるトランザクションを直接拒否することなどに役立ちます。このスコアは、お客様自身の不正行為のワークフローで、または既存のシステムのルールの一部として使用することもできます。reCAPTCHA はユニークなシグナルを検査し、インターネット全体でユニークな動作を可視化しているため、すでに成熟した不正検出エンジンであっても増分値を期待できます。

各スコア バケットは、偽陽性率の最大値に調整されます。これは、追加の摩擦が発生する可能性のある正当なユーザーの最大割合を表します。選択する必要があるしきい値は、ビジネスニーズによって異なります。transactionRisk スコアの使用例を次に示します。

リスク許容度 推奨のしきい値 最大偽陽性率 使用例
0.5 5% 取引を承認する前に、2FA などの追加の認証を要求する
0.7 1% トランザクションを手動審査に送信する
0.9 0.1% 取引を拒否する

次のステップ