Detectar e evitar invasões de contas

Nesta página, descrevemos como detectar e evitar sequestros de conta (ATOs, na sigla em inglês) usando a Google Cloud Fraud Defense.

Os ataques de ATO geralmente ocorrem quando um invasor envia solicitações para fazer login em endpoints de API usando credenciais obtidas em uma violação de dados, também conhecida como um despejo de senhas. 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 Google Cloud Fraud Defense.

Detectar e evitar ATOs

Com o Fraud Defense, é possível detectar e evitar 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 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>

Usar pontuações e desafios personalizados

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

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

Dependendo do caso de uso, é possível usar a MFA sozinha ou com chaves baseadas em pontuação. Por exemplo, talvez você prefira usar desafios de MFA apenas para pontuações abaixo de um determinado limite para reduzir o atrito.

O exemplo a seguir mostra como integrar chaves baseadas 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