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.

Les piratages de compte se produisent généralement lorsqu'un pirate informatique envoie des requêtes de connexion aux points de terminaison d'API à l'aide d'identifiants obtenus à partir d'une violation de données, également appelée vidage de 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 ne fonctionne pas avec les utilisateurs qui pratiquent une bonne gestion des mots de passe, comme l'utilisation d'un gestionnaire de mots de passe.

Avant de commencer

Préparez votre environnement pour reCAPTCHA.

Détecter et empêcher les piratages de compte

reCAPTCHA vous permet de détecter et d'empêcher les piratages de compte en utilisant l'un des les options suivantes:

Cochez la case "Je ne suis pas un robot".

L'ajout de la case à cocher Je ne suis pas un robot à votre site est le moyen le plus rapide et le plus simple de fournir une protection contre les piratages de compte sans avoir à intégrer de fonctionnalités supplémentaires, telles que la validation par SMS ou par e-mail.. Pour un pirate informatique, briser cette protection a un coût, et cette option peut suffire pour certains sites.

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

Le code suivant est un exemple réel d'une 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

Pour vous protéger contre les piratages de compte, utilisez des clés de site basées sur des scores reCAPTCHA et des tests d'authentification multifacteur (MFA, Multi-factor authentication). Par exemple, des tests par e-mail et par SMS sont envoyés à l'utilisateur, dans lesquels des mots de passe à usage unique (OTP) peuvent être utilisés.

Pour utiliser des clés basées sur des scores et des défis personnalisés, envisagez les options suivantes :

Selon votre cas d'utilisation, vous pouvez utiliser la MFA seule ou avec clés basées sur des scores. Par exemple, vous préférerez peut-être n'utiliser les questions d'MFA que pour en dessous d'un certain seuil pour réduire les frictions.

L'exemple suivant montre comment intégrer des clés basées sur des scores 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>

Étape suivante