Détecter et empêcher les piratages de compte

Cette page explique comment détecter et empêcher les piratages de compte à l'aide de reCAPTCHA Enterprise.

Les attaques ATO se produisent généralement lorsqu'un pirate envoie des requêtes de connexion aux points de terminaison de l'API à l'aide d'identifiants obtenus à partir d'une violation de données, ou fichier de vidage du mot de passe. Ce type d'attaque peut réussir, même si le vidage du mot de passe provient d'un site non lié, car les utilisateurs ont tendance à réutiliser les mots de passe pour plusieurs comptes. Ce type d'attaque n'affecte pas les utilisateurs qui appliquent une bonne gestion du mot de passe, comme l'utilisation d'un gestionnaire de mots de passe.

Avec reCAPTCHA Enterprise, vous pouvez détecter et empêcher les piratages d'équipes à l'aide de l'une des options suivantes:

Utilisation de la case à cocher "Je ne suis pas un robot"

L'ajout de la case à cocher Je ne suis pas un robot pour votre site est le moyen le plus simple et le plus rapide de protéger votre site selon les conditions de piratage de compte sans avoir à intégrer des fonctionnalités supplémentaires, telles que l'envoi de SMS ou la validation par e-mail. s'affiche en haut de l'écran. Un pirate informatique peut compromettre cette protection. Cette option peut suffire à certains sites.

Ajoutez la case à cocher "Je ne suis pas un robot" sur vos pages Web.

Voici un exemple en ligne d'une simple page de connexion protégée par la case à cocher.

function onSuccess(token) {
  // The token is included in the POST data in the g-recaptcha-response
  // parameter. The backend must create an Assessment with the token
  // and verify the token is valid.
  console.log(token);
}
<form id="loginForm" action="?" method="POST">
  Username: <input type="text" name="username"/><br/>
  Password: <input type="password" name="password"/><br/>
  <div class="g-recaptcha" data-sitekey="reCATCHA_sitekey"
       data-action="account_login" data-callback="onSuccess"></div>
</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>Account Login - Checkbox</title>
    <script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>
    <script>
    function onSuccess(token) {
      // The token is included in the POST data in the g-recaptcha-response
      // parameter. The backend must create an Assessment with the token
      // and verify the token is valid.
      console.log(token);
    }
    </script>
  </head>
  <body>
    <form id="loginForm" action="?" method="POST">
      Username: <input type="text" name="username"/><br/>
      Password: <input type="password" name="password"/><br/>
      <div class="g-recaptcha" data-sitekey="6LeAkOgUAAAAACcy3uY6N9H9SJMS27n3Zx2OOnYK"
           data-action="account_login" data-callback="onSuccess"></div>
    </form>
  </body>
</html>

Utiliser des scores et des défis personnalisés

La meilleure façon de se protéger contre les ATO est de s'appuyer sur les clés de site basées sur le score reCAPTCHA et d'utiliser les questions d'authentification multifacteur (MFA), comme les questions de messagerie et de SMS pour lesquelles les codes uniques (OTP) sont acceptés. sont envoyés à l'utilisateur.

Vous pouvez envisager les solutions suivantes pour vous protéger contre les piratages d'un compte:

Selon votre cas d'utilisation, vous pouvez utiliser l'authentification multifacteur ou l'utilisation de clés de site basées sur le score. Par exemple, vous pouvez préférer utiliser des défis MFA pour les scores inférieurs à un certain seuil afin de réduire la fluidité.

L'exemple suivant montre comment intégrer des clés de site basées sur le score dans le scénario de connexion.

function submitForm() {
  grecaptcha.enterprise.ready(function() {
    grecaptcha.enterprise.execute(
      'reCAPTCHA_site_key', {action: 'account_login'}).then(function(token) {
       document.getElementById("token").value = token;
       document.getElementByID("loginForm").submit();
    });
  });
}
<form id="loginForm" action="?" method="POST">
  Username: <input type="text" name="username"/><br/>
  Password: <input type="password" name="password"/><br/>
  <input type="hidden" id="token" name="recaptcha_token"/>
  <button onclick="submitForm()">Login</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>Account Login - Score</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: 'account_login'}).then(function(token) {
           document.getElementById("token").value = token;
           document.getElementByID("loginForm").submit();
        });
      });
    }
    </script>
  </head>
  <body>
    <form id="loginForm" action="?" method="POST">
      Username: <input type="text" name="username"/><br/>
      Password: <input type="password" name="password"/><br/>
      <input type="hidden" id="token" name="recaptcha_token"/>
      <button onclick="submitForm()">Login</button>
    </form>
  </body>
</html>