사기 방지를 통한 결제 트랜잭션 보호

이 페이지에서는 reCAPTCHA Enterprise 사기 방지를 사용하여 카딩, 도용된 기기 사기, 계정 탈취 결제와 같은 공격으로부터 결제 트랜잭션을 효과적으로 보호하는 방법을 설명합니다.

reCAPTCHA Enterprise 사기 방지는 타겟팅된 수동 공격과 확장된 사기 시도를 식별하여 결제 트랜잭션을 보호하는 데 도움이 됩니다. 사기일 가능성이 높은 이벤트를 식별하도록 행동 및 트랜잭션 모델을 자동으로 학습시키며, 수락 시 분쟁 또는 지불 거절이 발생할 수 있습니다.

reCAPTCHA Enterprise 사기 방지는 이러한 모델의 일부로 트랜잭션 신호를 검사하여 사기를 감지합니다. 예를 들어 일련의 저가 구매 시도는 카딩 공격을 나타낼 수 있습니다. 응답으로 여러 유형의 사기에 대한 위험 점수가 전송되며, 이 점수를 사용하여 트랜잭션을 수동 검토를 위해 보내거나 충분히 의심스러운 트랜잭션을 직접 차단할 수 있습니다.

reCAPTCHA Enterprise 사기 방지를 설정하려면 다음 단계를 완료하세요.

  1. 결제 프런트엔드에 reCAPTCHA Enterprise를 설치합니다.

  2. 트랜잭션 데이터로 평가를 만듭니다.

  3. 트랜잭션 이벤트로 평가에 주석을 추가합니다.

  4. 응답을 해석하여 잠재적인 사기에 대해 조치를 취하세요.

시작하기 전에

  1. reCAPTCHA Enterprise 사기 방지를 위한 가격 책정 정보를 검토하세요.

  2. reCAPTCHA Enterprise 환경을 준비합니다.

  3. 점수 기반 키를 만듭니다.

  4. 통합이 8KB보다 큰 토큰을 지원하는지 확인하세요. reCAPTCHA Enterprise 사기 방지에서는 더 큰 토큰을 사용할 수 있으므로 GET이 아닌 POST 요청으로, 헤더가 아닌 본문으로 전송되는 것을 확인하세요.

결제 프런트엔드에 reCAPTCHA Enterprise 설치

공격 감지를 시작하려면 결제 사용자 플로우의 각 페이지에 점수 기반 키를 설치합니다. 여기에는 사용자가 장바구니를 검토하고 결제 수단을 선택하고 구매를 완료하는 인터페이스가 포함됩니다. 각 단계에서 사용자가 선택을 하고 나면 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 메서드의 추가 필드를 사용하여 트랜잭션 데이터로 평가를 만듭니다. 이 기능을 사용하려면 조직에 Google을 사용 설정해야 합니다. 이 기능에 대한 액세스를 요청하려면 Google에 문의하세요.

가장 간단한 통합에는 트랜잭션 ID, 결제 수단, 통화, 트랜잭션 값이 포함됩니다.

{
  "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,
    }
  }
}

다음 필드는 선택사항이지만, 이러한 필드를 사기 감지 품질을 개선하기 위해 제공하는 것이 좋습니다.

{
  "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,
      "shipping_value": 7.99,
      "shipping_address": {
        "recipient": "name1 name2",
        "address": "123 Street Name",
        "address": "Apt 1",
        "locality": "Sunnyvale",
        "administrative_area": "CA",
        "region_code": "USA",
        "postal_code": "123456"
      },
      "billing_address": {
        "recipient": "name1 name2",
        "address": "123 Street Name",
        "address": "Apt 1",
        "locality": "Sunnyvale",
        "administrative_area": "CA",
        "region_code": "USA",
        "postal_code": "123456"
      },
      "user": {
        "account_id": "abcde12345",
        "creation_ms": 1650000000000,
        "email": "user@example.com",
        "email_verified": true,
        "phone_number": "+16502530000",
        "phone_verified" false
      },
      "merchant": {
        "account_id": "abcde12345",
        "creation_ms": 1650000000000,
        "email": "user@example.com",
        "email_verified": true,
        "phone_number": "+16502530000",
        "phone_verified": false
      },
      "items": {
        "name": "first item",
        "value": 19.99,
        "quantity": 1,
        "merchant_account_id": "abcde12345",
      },
      "items": {
        "name": "second item",
        "value": 19.99,
        "quantity": 1,
        "merchant_account_id": "abcde12345",
      },
      "gateway_info": {
        "name": "google",
        "gateway_response_code": "SUCCESS",
        "avs_response_code": "Y",
        "cvv_response_code": "Y",
      }
    }
  }
}

평가를 만드는 방법은 웹사이트 평가 만들기를 참조하세요.

평가에 트랜잭션 이벤트 주석 추가

최상의 성능을 위해 reCAPTCHA Enterprise 사기 방지에는 트랜잭션의 결제 수명 주기 이벤트에 대한 가시성이 필요합니다. 따라서 트랜잭션 데이터로 만든 평가에 대한 주석을 전송해야 합니다. 예를 들어 다음 시나리오에서는 트랜잭션 정보를 reCAPTCHA Enterprise 사기 방지에 트랜잭션 이벤트로 제공해야 합니다.

  • 결제 시스템 공급자가 거래를 수락 또는 거부합니다.

  • 판매자가 환불을 처리함

  • 결제 기관에서 환불을 신청함

주석을 전송하는 방법에 대한 자세한 내용은 평가에 주석 추가를 참조하세요.

트랜잭션 상태가 변경되는 등 데이터를 사용할 수 있는 경우 시스템에서 해당 로직의 일부로 이러한 요청을 자동으로 수행하는 것이 좋습니다.

reCAPTCHA Enterprise 사기 방지는 포함된 트랜잭션 데이터로 평가를 만든 후 결과 및 assessment_id를 반환합니다. 트랜잭션 이벤트 발생 시 다음과 같이 결제 수명 주기의 중요 단계에서 트랜잭션 이벤트로 평가에 주석을 추가합니다.

이벤트 유형 설명 이유 예시 값 예시
MERCHANT_APPROVE | MERCHANT_DENY 트랜잭션을 계속 진행하도록 허용할지 여부를 결정하는 경우 IN_HOUSE 해당 사항 없음
AUTHORIZATION | AUTHORIZATION_DECLINE 처리할 트랜잭션을 제출하면 카드 발급기관에서 트랜잭션 진행 여부를 결정할 수 있습니다. 82(CVV가 잘못되었음을 의미하는 이유 코드) 해당 사항 없음
CHARGEBACK 트랜잭션이 지불 거절되는 경우 Card Reported Stolen 20(통화 20단위의 부분 지불 거절 표시)

CHARGEBACK 이벤트 유형과 함께 reason 필드를 사용하여 카드 발급기관에서 제공한 지불 거절 이유 코드를 포함합니다. 또한 트랜잭션이 부분적으로 지불 거절된 경우 value 필드에 지불 거절된 금액도 포함합니다.

트랜잭션 이벤트 reason에는 이벤트 이유에 대한 추가 컨텍스트를 제공하거나 결제 네트워크 또는 카드 발급기관에서 직접 가져온 이유 코드를 제공하는 명확한 설명이 포함됩니다. 용어와 코드는 이벤트 유형에 따라 다릅니다.

다음 표에서는 트랜잭션 이벤트 유형의 전체 목록을 명시합니다.

주석 이유 설명
MERCHANT_APPROVE 판매자가 트랜잭션을 승인했음을 나타냅니다. 부수적인 이유로 IN_HOUSE, ACCERTIFY, CYBERSOURCE 또는 MANUAL_REVIEW와 같은 용어가 포함될 수 있습니다.
MERCHANT_DENY 판매자가 감지한 위험으로 인해 트랜잭션이 거부되고 종료되었음을 나타냅니다. 부수적인 이유로 IN_HOUSE, ACCERTIFY, CYBERSOURCE 또는 MANUAL_REVIEW와 같은 용어가 포함될 수 있습니다.
MANUAL_REVIEW 의심 또는 위험으로 인해 사람이 트랜잭션을 평가하고 있음을 나타냅니다.
AUTHORIZATION 카드 발급기관에 대한 승인 시도가 성공했음을 나타냅니다.
AUTHORIZATION_DECLINE 카드 발급기관을 통한 승인 시도가 실패했음을 나타냅니다. 부수적인 이유로 카드가 만료되었음을 나타내는 Visa의 54 또는 CVV가 잘못되었음을 나타내는 82가 포함될 수 있습니다.
PAYMENT_CAPTURE 금액이 결제되어 트랜잭션이 완료되었음을 나타냅니다.
PAYMENT_CAPTURE_DECLINE 금액이 결제되지 않아 트랜잭션을 완료할 수 없음을 나타냅니다.
CANCEL 트랜잭션이 취소되었음을 나타냅니다. 취소 이유를 지정합니다. 예를 들면 INSUFFICIENT_INVENTORY입니다.
CHARGEBACK_INQUIRY 트랜잭션에 대한 사기로 인해 판매자에게 지불 거절 문의를 전송했으며, 사기로 인한 지불 거절이 공식적으로 실행되고 정식 지불 거절 알림이 전송되기 전에 추가 정보를 요청함을 나타냅니다.
CHARGEBACK_ALERT 트랜잭션 사기로 인해 판매자가 지불 거절 알림을 받았음을 나타냅니다. 결제 네트워크의 개입 없이 분쟁을 해결하는 프로세스가 시작됩니다.
FRAUD_NOTIFICATION 트랜잭션이 사기로 판단되므로 결제 수단 발급 은행에서 발송하는 트랜잭션에 대해 사기 알림이 발행되었음을 나타냅니다. 이 이벤트 유형의 reason 필드에 TC40 또는 SAFE 데이터를 포함하는 것이 좋습니다. 부분 지불 거절의 경우 value 필드에 금액을 포함하는 것이 좋습니다.
CHARGEBACK 결제 네트워크를 통해 판매자에게 사기로 인해 해당 트랜잭션에 대한 지불 거절 프로세스가 시작되었음을 알립니다. 이유 코드 예시로는 Discover의 60056041 등이 있습니다. 부분 지불 거절의 경우 value 필드에 금액을 포함하는 것이 좋습니다.
CHARGEBACK_REPRESENTMENT 사기로 인해 트랜잭션이 대한 지불 거절 프로세스가 시작되었으며 해당 판매자가 대표를 입력하도록 선택되었음을 나타냅니다. 이유 예시로는 Discover의 60056041 등이 있습니다. 부분 지불 거절의 경우 value 필드에 금액을 포함하는 것이 좋습니다.
CHARGEBACK_REVERSE 해당 트랜잭션에 불법적인 사기 지불 거절이 포함되어 결과적으로 해당 트랜잭션이 취소되었음을 나냅니다. 부분 지불 거절의 경우 value 필드에 금액을 포함하는 것이 좋습니다.
REFUND_REQUEST 판매자가 완료된 트랜잭션에 대한 환불을 받았음을 나타냅니다. 부분 환불의 경우 value 필드에 금액을 포함하는 것이 좋습니다. 이유 예시: FRAUD
REFUND_DECLINE 판매자가 이 트랜잭션에 대한 환불 요청을 받았지만 거부했음을 나타냅니다. 부분 환불의 경우 value 필드에 금액을 포함하는 것이 좋습니다. 이유 예시: FRAUD
REFUND 판매자가 완료된 트랜잭션을 환불했음을 나타냅니다. 부분 환불의 경우 value 필드에 금액을 포함하는 것이 좋습니다. 이유 예시: PROACTIVE_FRAUD
REFUND_REVERSE 판매자가 완료된 트랜잭션을 환불했으며 이 환불이 취소되었음을 나타냅니다. 부분 환불의 경우 value 필드에 금액을 포함하는 것이 좋습니다.

다음 예시에서는 트랜잭션 이벤트가 포함된 샘플 주석 페이로드를 보여줍니다. 자세한 내용은 평가 주석 추가를 참조하세요.

POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate
{
  "transaction_event": {
    "event_type": "CHARGEBACK",
    "reason": "Card Reported Stolen",
    "value": 20
  }
}

평가 해석

트랜잭션 데이터를 보내기 시작하면 riskAnalysis 응답에 fraudPreventionAssessment 구성요소가 표시됩니다.

fraudPreventionAssessment 구성요소에는 트랜잭션 위험 점수와 다양한 유형의 공격을 식별하는 여러 사기 점수가 포함됩니다. reCAPTCHA Enterprise 사기 방지 transactionRisk 점수 범위는 0.0~1.0이며 아래 구성요소에서 이 트랜잭션과 관련된 위험을 요약합니다. 위험 점수 0.0은 위험이 낮고 트랜잭션이 적법할 가능성이 높다는 것을 나타내고 1.0은 위험이 높고 상호작용이 허위일 가능성이 높음을 나타냅니다.

reCAPTCHA Enterprise 사기 방지를 설치하고 TransactionData 구성요소를 추가하면 웹사이트를 사용하여 도난당한 기기 또는 무작위 대입 정보 목록을 테스트하는 위협을 감지하는 cardTestingVerdict 값에 액세스할 수 있습니다. 이러한 위험 시도가 성공하면 비즈니스에 손실이 발생합니다.

또한 사이트 및 인터넷의 행동 신호를 기반으로 세션의 신뢰를 나타내는 behavioralTrustVerdict 값에 액세스할 수 있습니다. 이 점수는 특히 기존 사기 엔진을 사용 중이고 거짓양성을 줄이기를 원하는 경우에 유용합니다. 이 점수에는 트랜잭션 데이터를 기반으로 하는 기존 감지에 대한 고유하고 올바른 정보가 포함되므로 위험하거나 중립적인 특정 트랜잭션에 대한 확신을 추가할 수 있습니다.

지불 거절 정보를 포함한 수명 주기 이벤트를 전송하면 stolenInstrumentVerdict 값에 액세스할 수 있습니다. 여기서는 reCAPTCHA Enterprise가 수백만 개의 웹사이트 네트워크 전반에서 해당 트랜잭션 및 사용자 행동에 대해 분석하는 신호를 기반으로 사기 가능성이 높은 소규모 공격을 감지합니다.

보안 검토 후 추가 점수(도난당한 기기 위험, 카드 테스트 위험)에 대한 액세스가 사용 설정됩니다. 보안 검토를 시작하려면 영업팀에 문의하세요.

다음 블록은 transactionRisk, cardTestingVerdict, stolenInstrumentVerdict, behavioralTrustVerdict 값이 있는 응답의 예시를 보여줍니다.

"riskAnalysis": {
    "score": "BOT_SCORE"
}
"fraudPreventionAssessment": {
    "transactionRisk": 0.9,
    "stolenInstrumentVerdict": {
        "risk": 0.7
    },
    "cardTestingVerdict": {
        "risk": 1.0
    }
    "behavioralTrustVerdict": {
        "trust": 0.0
    }
}

평가에 따라 수행하는 작업은 사용자의 책임입니다. 가장 간단한 통합의 경우 최상위 transactionRisk에 기준점을 설정하여 결정에 영향을 줄 수 있습니다. 예를 들어 수동 검토를 위해 전송하거나 사기일 가능성이 높은 트랜잭션을 직접 거부하는 데 도움이 될 수 있습니다. 이러한 점수는 자체 사기 워크플로에 사용하거나 기존 시스템에 대한 규칙의 일부로 사용할 수도 있습니다. reCAPTCHA Enterprise는 다양한 신호를 검사하며 동작의 가시성이 다르므로 이미 성숙한 감지 엔진을 사용하더라도 증분 값을 기대할 수 있습니다.

다음 단계