Detectar y evitar la apropiación de cuentas

En esta página, se describe cómo detectar y evitar la apropiación de cuentas (ATO) con reCAPTCHA Enterprise.

Los ataques de ATO suelen ocurrir cuando un atacante envía solicitudes para acceder a los extremos de la API mediante credenciales que se obtuvieron de una violación de la seguridad de los datos, también conocido como volcado de contraseñas. Este tipo de ataque puede ser exitoso, incluso si se vuelca la contraseña desde un sitio no relacionado, ya que las personas tienden a reutilizar las contraseñas en varias cuentas. Este tipo de ataque no afecta a los usuarios que practican la higiene de contraseñas adecuada, como el uso de un administrador de contraseñas.

Con reCAPTCHA Enterprise, puedes detectar y evitar el ATO mediante una de las siguientes opciones:

Cómo usar la casilla de verificación "No soy un robot"

Agregar la casilla de verificación No soy un robot a tu sitio es la forma más rápida y fácil de proporcionar protección contra las ATO sin tener que integrar funciones adicionales, como la verificación por SMS o por correo electrónico. , El atacante tiene un costo para romper esta protección, y esta opción puede ser suficiente para algunos sitios.

Agrega la casilla de verificación "No soy un robot" en tus páginas web.

El siguiente es un ejemplo de una página de acceso simple protegida por la casilla de verificación.

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>

Puedes experimentar con este código en JSFiddle si haces clic en el icono <> en la esquina superior derecha de la ventana de código.

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

Usar puntuaciones y desafíos personalizados

La mejor manera de protegerse contra las ATO es confiar en las claves de sitios basadas en puntuaciones de reCAPTCHA y usar desafíos de autenticación de varios factores (MFA), como desafíos de correo electrónico y SMS en los que los códigos únicos (OTP) se envían al usuario.

Considera las siguientes opciones para protegerte contra los ATO:

Según tu caso de uso, puedes usar la MFA sola o con claves de sitio basadas en puntuaciones. Por ejemplo, es posible que prefieras usar los desafíos de MFA solo para puntuaciones por debajo de un cierto límite a fin de reducir los problemas.

En el siguiente ejemplo, se muestra cómo integrar claves de sitio basadas en puntuaciones en la situación de acceso.

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>

Puedes experimentar con este código en JSFiddle si haces clic en el icono <> en la esquina superior derecha de la ventana de código.

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