Rilevare e prevenire le violazioni degli account

Questa pagina descrive come rilevare e prevenire i furti di account (ATO) utilizzando reCAPTCHA.

Gli attacchi ATO in genere si verificano quando un aggressore invia richieste di accesso agli endpoint API utilizzando le credenziali ottenute da una violazione dei dati, nota anche come un dump delle password. Questo tipo di attacco può avere successo, 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 influisce sugli utenti che praticano una corretta igiene delle password, ad esempio utilizzando un gestore delle password.

Prima di iniziare

Prepara l'ambiente per reCAPTCHA.

Rilevare e prevenire gli attacchi ATO

Con reCAPTCHA, puoi rilevare e prevenire gli attacchi 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 attacchi ATO senza dover integrare funzionalità aggiuntive, come la verifica email o via SMS. Per un aggressore, violare questa protezione ha un costo e questa opzione potrebbe essere sufficiente per alcuni siti.

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

Il seguente codice è un esempio live 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 sperimentare con questo codice in JSFiddle facendo clic sull'icona <> nell' angolo in alto a destra della finestra del 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 verifiche personalizzate

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

Per utilizzare le chiavi basate sul punteggio e le verifiche personalizzate, valuta le seguenti opzioni:

A seconda del tuo caso d'uso, puoi utilizzare la MFA da sola o con le chiavi basate sul punteggio. Ad esempio, potresti preferire utilizzare le verifiche MFA solo per i punteggi inferiori a una determinata soglia per ridurre l'attrito.

Il seguente esempio mostra come integrare le chiavi basate sul punteggio 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 sperimentare con questo codice in JSFiddle facendo clic sull'icona <> nell' angolo in alto a destra della finestra del 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