Rileva e previeni le violazioni degli account

Questa pagina descrive come rilevare e prevenire i takeover dell'account (ATO) utilizzando reCAPTCHA.

Gli attacchi ATO si verificano in genere quando un malintenzionato invia richieste per accedere agli endpoint API utilizzando le credenziali ottenute da una violazione dei dati, nota anche come dump delle password. Questo tipo di attacco può essere efficace anche se il dump delle password proviene da un sito non correlato, perché le persone tendono a riutilizzare le password su più account. Questo tipo di attacco non interessa gli utenti che adottano pratiche di gestione delle password adeguate, ad esempio l'utilizzo di un gestore delle password.

Prima di iniziare

Prepara l'ambiente per reCAPTCHA.

Rileva e previeni gli attacchi di acquisizione di account

Con reCAPTCHA, puoi rilevare e prevenire le ATO utilizzando una delle seguenti opzioni:

Utilizzare la casella di controllo Non sono un robot

L'aggiunta della casella di controllo Non sono un robot al tuo sito è il modo più rapido e semplice per fornire una certa protezione contro gli ATO senza dover integrare funzionalità aggiuntive, come la verifica tramite SMS o email. Per un utente malintenzionato, violare questa protezione ha un costo e questa opzione potrebbe essere sufficiente per alcuni siti.

Aggiungi la casella di controllo "Non sono un robot" nelle tue pagine web.

Il seguente codice è un esempio pratico di una pagina di accesso protetta dalla casella di controllo:

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>

Puoi fare esperimenti con questo codice in JSFiddle facendo clic sull'icona <> nell'angolo in alto a destra della finestra di codice.

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

Utilizzare punteggi e sfide personalizzate

Per proteggerti dagli attacchi di violazione di account, utilizza le chiavi basate sul punteggio di reCAPTCHA e le verifiche di autenticazione a più fattori (MFA), ad esempio le verifiche via email e SMS in cui vengono inviati all'utente codici una tantum (OTP).

Per utilizzare chiavi basate su punteggi e sfide personalizzate, prendi in considerazione le seguenti opzioni:

A seconda del caso d'uso, puoi utilizzare l'autenticazione a due MFA da sola o con le chiavi basate su punteggi. Ad esempio, per ridurre le difficoltà, potresti preferire utilizzare le verifiche di MFA solo per i punteggi al di sotto di una determinata soglia.

Il seguente esempio mostra come integrare le chiavi basate su punteggi nello scenario di accesso.

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>

Puoi fare esperimenti con questo codice in JSFiddle facendo clic sull'icona <> nell'angolo in alto a destra della finestra di codice.

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

Passaggi successivi