Detectar e impedir invasões de contas

Nesta página, descrevemos como detectar e impedir invasões de conta (ATOs, na sigla em inglês) usando o reCAPTCHA Enterprise.

Os ataques de ATO geralmente ocorrem quando um invasor envia solicitações para fazer login nos endpoints da API usando credenciais recebidas de uma violação de dados, também conhecida como despejo de senha. Esse tipo de ataque pode ser bem-sucedido, mesmo se o despejo de senha for de um site não relacionado, porque os humanos tendem a reutilizar senhas em várias contas. Esse tipo de ataque não afeta usuários que praticam a limpeza adequada da senha, como o uso de um gerenciador de senhas.

Antes de começar

Prepare seu ambiente para o reCAPTCHA Enterprise.

Detectar e evitar ATOs

Com o reCAPTCHA Enterprise, é possível detectar e impedir ATOs usando uma das seguintes opções:

Usar a caixa de seleção "Não sou um robô"

Adicionar a caixa de seleção Não sou um robô ao site é a maneira mais rápida e fácil de proteger contra ATOs sem precisar integrar outros recursos, como verificação por SMS ou e-mail. Há um custo para que um invasor viole essa proteção, e essa opção pode ser suficiente para alguns sites.

Adicione a caixa de seleção "Não sou um robô" nas suas páginas da Web.

O código a seguir é um exemplo ativo de uma página de login simples protegida pela caixa de seleção:

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>

Você pode experimentar esse código no JSFiddle clicando no ícone <> no canto superior direito da janela 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>

Use pontuações e desafios personalizados

Para se proteger contra ATOs, use as chaves baseadas em pontuação do reCAPTCHA e use desafios de autenticação multifator (MFA), como desafios por e-mail e SMS em que os códigos de uso único (OTPs) são enviados ao usuário.

Para usar chaves baseadas em pontuação e desafios personalizados, considere as seguintes opções:

Dependendo do seu caso de uso, você pode usar a MFA por conta própria ou com chaves baseadas em pontuação. Por exemplo, talvez você prefira usar os desafios de MFA apenas para pontuações abaixo de um determinado limite para reduzir atrito.

O exemplo a seguir mostra como integrar chaves com base em pontuação no cenário de login.

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>

Você pode experimentar esse código no JSFiddle clicando no ícone <> no canto superior direito da janela 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>

A seguir