Rilevamento e prevenzione di violazioni degli account

In questa pagina viene descritto come rilevare e prevenire i takeover dell'account (ATO) tramite reCAPTCHA Enterprise.

Gli attacchi ATO solitamente si verificano quando un utente malintenzionato invia richieste di accesso agli endpoint API utilizzando credenziali derivanti da una violazione dei dati, nota anche come dump delle password. Questo tipo di attacco può avere esito positivo, anche se il dump della password proviene da un sito non correlato, poiché le persone tendono a riutilizzarle in più account. Questo tipo di attacco non influisce sugli utenti che adottano metodi corretti per l'igiene delle password, ad esempio utilizzando un gestore delle password.

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

Utilizzo della casella di controllo I'm non un robot

Aggiungere la casella di controllo I'm not a robot al tuo sito è il modo più semplice e veloce per fornire protezione da ATO senza dover integrare funzionalità aggiuntive, come la verifica via SMS o via email. Per un utente malintenzionato viene addebitato un costo per violare questa protezione e questa opzione potrebbe essere sufficiente per alcuni siti.

Aggiungi la casella di controllo "I 'm not a robot" nelle tue pagine web.

Di seguito è riportato un esempio reale di una semplice 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 provare 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>

Utilizzo dei punteggi e sfide personalizzate

Il modo migliore per proteggersi dagli ATO è affidarsi alle chiavi sito basate sul punteggio reCAPTCHA e utilizzare le verifiche con autenticazione a più fattori (MFA), come le verifiche via email e SMS in cui agli utenti vengono inviati codici monouso.

Considera le seguenti opzioni per la protezione dagli ATO:

A seconda del caso d'uso, puoi utilizzare l'MFA da solo o con chiavi del sito basate su punteggio. Ad esempio, potresti utilizzare le sfide MFA solo per i punteggi inferiori a una determinata soglia, per ridurre il fastidio.

L'esempio seguente mostra come integrare le chiavi di sito 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 provare 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>