Protéger les transactions de paiement avec la prévention des fraudes

Cette page explique comment protéger efficacement les transactions de paiement contre les attaques telles que le carding, la fraude aux instruments de paiement volés et la fraude de paiement via le piratage de compte à l'aide de la prévention des fraudes de reCAPTCHA Enterprise.

La prévention des fraudes de reCAPTCHA Enterprise vous aide à protéger les transactions de paiement en identifiant les attaques manuelles ciblées et les tentatives de fraude à grande échelle. Elle entraîne automatiquement les modèles de comportement et de transaction pour identifier les événements potentiellement frauduleux et qui peuvent entraîner un litige ou un rejet de débit s'ils sont acceptés.

Dans le cadre de ces modèles, reCAPTCHA Enterprise Fraud Prevention examine les signaux de transaction pour détecter les fraudes. Par exemple, une série de tentatives d'achat à des prix bas peut indiquer une attaque par carding. Dans la réponse, vous recevez des scores de risque pour différents types de fraudes. Vous pouvez les utiliser pour soumettre la transaction à un examen manuel ou bloquer directement des transactions suffisamment suspectes.

Pour configurer la prévention des fraudes de reCAPTCHA Enterprise, procédez comme suit:

  1. Installez reCAPTCHA Enterprise sur votre interface de paiement.

  2. Créez des évaluations avec des données de transaction.

  3. Annotez les évaluations avec des événements de transaction.

  4. interpréter les réponses pour prendre des mesures en cas de fraude potentielle ;

Avant de commencer

  1. Consultez les informations tarifaires concernant reCAPTCHA Enterprise Fraud Prevention.

  2. Préparez votre environnement pour reCAPTCHA Enterprise.

  3. Créez des clés basées sur des scores.

  4. Vérifiez que votre intégration accepte les jetons de plus de 8 Ko. reCAPTCHA Enterprise Fraud Prevention peut utiliser des jetons plus volumineux. Vérifiez donc qu'ils sont envoyés dans des requêtes POST plutôt que GET, et dans le corps, et non dans un en-tête.

Installer reCAPTCHA Enterprise sur votre interface de paiement

Pour commencer à détecter les attaques, installez une clé basée sur des scores sur chaque page de votre parcours utilisateur de paiement. Cela inclut l'interface permettant à l'utilisateur de consulter son panier, de sélectionner son mode de paiement et de finaliser l'achat. Une fois que l'utilisateur a effectué sa sélection à chaque étape, appelez grecaptcha.enterprise.execute() pour générer un jeton. Pour savoir comment installer des clés basées sur des scores et appeler execute(), consultez Installer des clés basées sur des scores.

L'exemple suivant montre comment intégrer une clé basée sur des scores à un événement de transaction par carte de crédit.

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>

Vous pouvez tester ce code dans JSFiddle en cliquant sur l'icône <> dans l'angle supérieur droit de la fenêtre de code.

<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>

Créer une évaluation avec des données de transaction

Pour activer les verdicts de fraude de paiement, créez des évaluations avec des données de transaction en utilisant les champs supplémentaires de la méthode projects.assessments.create. Pour que vous puissiez utiliser cette fonctionnalité, Google doit l'activer pour votre organisation. Pour demander l'accès à cette fonctionnalité, contactez-nous.

L'intégration la plus simple inclut l'ID de transaction, le mode de paiement, la devise et la valeur de la transaction.

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

Les champs suivants sont facultatifs, mais nous vous recommandons de les renseigner pour améliorer la qualité de la détection des fraudes.

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

Pour en savoir plus sur la création d'évaluations, consultez la page Créer une évaluation pour votre site Web.

Annoter les évaluations avec des événements de transaction

Pour des performances optimales, la prévention des fraudes de reCAPTCHA Enterprise a besoin de visibilité sur les événements de cycle de vie des paiements pour les transactions. Par conséquent, vous devez envoyer des annotations pour les évaluations que vous avez créées avec des données de transaction. Par exemple, vous devez fournir les informations de transaction à reCAPTCHA Enterprise Fraud Prevention en tant qu'événement de transaction dans les cas suivants:

  • Le fournisseur de services de paiement accepte ou refuse la transaction.

  • Le marchand émet un remboursement

  • L'émetteur du paiement dépose un remboursement

Pour en savoir plus sur l'envoi d'annotations, consultez Annoter les évaluations.

Nous vous recommandons d'effectuer ces requêtes automatiquement dans le cadre de la logique correspondante de votre système lorsque les données sont disponibles, par exemple lorsque l'état d'une transaction change.

Une fois que vous avez créé une évaluation avec les données de transaction incluses, reCAPTCHA Enterprise Fraud Prevention renvoie un verdict et un assessment_id. Annotez l'évaluation avec des événements de transaction lors des étapes importantes suivantes du cycle de vie des paiements, lorsqu'ils se produisent:

Type d'événement Description Exemple de motif Exemple de valeur
MERCHANT_APPROVE | MERCHANT_DENY Cas où vous décidez si la transaction doit être autorisée ou non. IN_HOUSE Non disponible
AUTHORIZATION | AUTHORIZATION_DECLINE Cas où vous envoyez la transaction à traiter et où l'émetteur de la carte décide de l'autoriser ou non. 82 (un code de motif indiquant que le CVV était incorrect) Non disponible
CHARGEBACK Cas où la transaction est rejetée. Card Reported Stolen 20 (correspondant à un rejet de débit partiel de 20 unités de devise)

Avec le type d'événement CHARGEBACK, incluez le code du motif du rejet de débit fourni par l'émetteur de la carte à l'aide du champ reason. Incluez également le montant du rejet de débit dans le champ value si la transaction a été partiellement refactée.

Dans le champ reason de l'événement de transaction, incluez des conditions clarifiées pour fournir plus de contexte sur le motif de l'événement, ou fournissez des codes de motif obtenus directement auprès du réseau de paiement ou de l'émetteur de la carte. Ces termes et codes diffèrent selon le type d'événement.

Le tableau suivant répertorie la liste complète des types d'événements de transaction:

Motif de l'annotation Description
MERCHANT_APPROVE Indique que la transaction est approuvée par le marchand. Les motifs associés peuvent inclure des termes tels que IN_HOUSE, ACCERTIFY, CYBERSOURCE ou MANUAL_REVIEW.
MERCHANT_DENY Indique que la transaction est refusée et conclue en raison des risques détectés par le marchand. Les motifs d'accompagnement peuvent inclure des termes tels que IN_HOUSE, ACCERTIFY, CYBERSOURCE ou MANUAL_REVIEW.
MANUAL_REVIEW Indique que la transaction est en cours d'évaluation par un être humain en raison de suspicions ou de risques.
AUTHORIZATION Indique que la tentative d'autorisation auprès de l'émetteur de la carte a réussi.
AUTHORIZATION_DECLINE Indique que la tentative d'autorisation auprès de l'émetteur de la carte a échoué. Les motifs d'accompagnement peuvent inclure le 54 de Visa indiquant que la carte a expiré ou 82 indiquant que le CVV est incorrect.
PAYMENT_CAPTURE Indique que la transaction a été effectuée parce que les fonds ont été réglés.
PAYMENT_CAPTURE_DECLINE Indique que la transaction n'a pas pu être finalisée parce que les fonds n'ont pas été réglés.
CANCEL Indique que la transaction est annulée. Indiquez le motif de l'annulation. Par exemple, INSUFFICIENT_INVENTORY.
CHARGEBACK_INQUIRY Indique que le marchand a reçu une demande de rejet de débit pour fraude sur la transaction, demandant des informations supplémentaires avant que le rejet de débit frauduleux ne soit officiellement émis et qu'une notification officielle de rejet de débit soit envoyée.
CHARGEBACK_ALERT Indique que le marchand a reçu une alerte de rejet de débit en raison d'une fraude lors de la transaction. Une procédure de résolution du litige sans impliquer le réseau de paiement est lancée.
FRAUD_NOTIFICATION Indique qu'une notification de fraude est émise pour la transaction, envoyée par la banque émettrice du mode de paiement, car la transaction semble frauduleuse. Nous vous recommandons d'inclure les données TC40 ou SAFE dans le champ reason pour ce type d'événement. Pour les rejets de débit partiels, nous vous recommandons d'inclure un montant dans le champ value.
CHARGEBACK Indique que le marchand est informé par le réseau de paiement que la transaction est lancée dans le cadre du processus de rejet de débit pour fraude. Exemples de code de motif : 6005 et 6041 de Discover. Pour les rejets de débit partiels, nous vous recommandons d'inclure un montant dans le champ value.
CHARGEBACK_REPRESENTMENT Indique que la transaction a commencé le processus de rejet de débit pour fraude et que le marchand a choisi de se faire représenter. Exemples : 6005 et 6041 de Discover. Pour les rejets de débit partiels, nous vous recommandons d'inclure un montant dans le champ value.
CHARGEBACK_REVERSE Indique que la transaction a fait l'objet d'un rejet de débit frauduleux qui était illégitime et a été annulé en conséquence. Pour les rejets de débit partiels, nous vous recommandons d'inclure un montant dans le champ value.
REFUND_REQUEST Indique que le marchand a reçu un remboursement pour une transaction terminée. Pour les remboursements partiels, nous vous recommandons d'inclure un montant dans le champ value. Exemple de motif: FRAUD.
REFUND_DECLINE Indique que le marchand a reçu une demande de remboursement pour cette transaction, mais qu'il l'a refusée. Pour les remboursements partiels, nous vous recommandons d'inclure un montant dans le champ value. Exemple de motif : FRAUD.
REFUND Indique que la transaction a été remboursée par le marchand. Pour les remboursements partiels, nous vous recommandons d'inclure un montant dans le champ value. Exemple de motif: PROACTIVE_FRAUD.
REFUND_REVERSE Indique que la transaction finalisée a été remboursée par le marchand et que ce remboursement a été annulé. Pour les remboursements partiels, nous vous recommandons d'inclure un montant dans le champ value.

L'exemple suivant montre un exemple de charge utile d'annotation contenant un événement de transaction. Pour en savoir plus, consultez Annoter les évaluations.

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

Interpréter les évaluations

Une fois que vous avez commencé à envoyer les données de transaction, le composant fraudPreventionAssessment s'affiche dans la réponse riskAnalysis.

Le composant fraudPreventionAssessment comprend un score de risque lié aux transactions et plusieurs scores de fraude qui identifient différents types d'attaques. Le score reCAPTCHA Enterprise Fraud Prevention transactionRisk est compris entre 0,0 et 1,0, ce qui résume le risque associé à cette transaction à partir des composants ci-dessous. Le score de risque de 0,0 indique que le risque est faible et que la transaction est probablement légitime, tandis que 1,0 indique que le risque est élevé et que l'interaction est probablement frauduleuse.

En installant reCAPTCHA Enterprise Fraud Prevention et en ajoutant le composant TransactionData, vous accédez à la valeur cardTestingVerdict, qui détecte les pirates informatiques utilisant votre site Web pour tester des listes d'instruments volés ou d'informations par force brute. S’ils réussissent, cela entraîne des pertes pour votre entreprise.

Vous avez également accès à la valeur behavioralTrustVerdict, qui indique la confiance dans une session en fonction des signaux comportementaux sur votre site et sur Internet. Ce score est particulièrement utile si vous utilisez un moteur de fraude existant et que vous souhaitez réduire le nombre de faux positifs. Étant donné que ce score inclut des informations uniques et orthogonales à la détection conventionnelle basée sur les données de transaction, il est efficace pour renforcer la confiance dans certaines transactions neutres ou risquées.

Une fois que vous avez envoyé des événements de cycle de vie, y compris des informations sur le rejet de débit, vous avez accès à la valeur stolenInstrumentVerdict. Il détecte les attaques, même à très faible échelle, susceptibles d'être frauduleuses, en fonction des signaux analysés par reCAPTCHA Enterprise sur la transaction et du comportement des utilisateurs sur le réseau de millions de sites Web.

L'accès aux scores supplémentaires (risque lié aux instruments volés, risque de test des cartes) est activé après un examen de sécurité. Contactez notre équipe commerciale pour lancer l'examen de sécurité.

Le bloc suivant montre un exemple de réponse avec les valeurs transactionRisk, cardTestingVerdict, stolenInstrumentVerdict et behavioralTrustVerdict.

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

Vous êtes responsable des mesures que vous prenez suite à l'évaluation. Pour une intégration la plus simple, vous pouvez définir des seuils au niveau de transactionRisk pour contribuer à votre décision. Par exemple, elles peuvent contribuer à l'envoi à un examen manuel ou au rejet direct de transactions potentiellement frauduleuses. Vous pouvez également utiliser ces scores dans vos propres workflows de fraude ou dans le cadre de règles appliquées à votre système existant. Étant donné que reCAPTCHA Enterprise examine différents signaux et offre une visibilité différente du comportement, vous pouvez vous attendre à une valeur supplémentaire, même avec un moteur de détection déjà mature.

Étapes suivantes