Esta página descreve como detetar e impedir a apropriação de contas (ATOs) com o reCAPTCHA.
Os ataques de ATO ocorrem normalmente quando um atacante envia pedidos para iniciar sessão em pontos finais da API através de credenciais obtidas a partir de uma violação de dados, também conhecida como um roubo de palavras-passe. Este tipo de ataque pode ser bem-sucedido, mesmo que a divulgação de palavras-passe seja de um site não relacionado, porque as pessoas tendem a reutilizar palavras-passe em várias contas. Este tipo de ataque não afeta os utilizadores que praticam uma higiene de palavras-passe adequada, como a utilização de um gestor de palavras-passe.
Antes de começar
Prepare o seu ambiente para o reCAPTCHA.
Detete e impeça ATOs
Com o reCAPTCHA, pode detetar e impedir ATOs através de uma das seguintes opções:
Use a caixa de verificação Não sou um robô
Adicionar a caixa de verificação Não sou um robô ao seu site é a forma mais rápida e fácil de oferecer alguma proteção contra ATOs sem ter de integrar funcionalidades adicionais, como a validação por SMS ou email. Existe um custo para um atacante quebrar esta proteção e esta opção pode ser suficiente para alguns sites.
Adicione a caixa de verificação "Não sou um robô" nas suas páginas Web.
O código seguinte é um exemplo em direto de uma página de início de sessão protegida pela caixa de verificaçã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>
Pode experimentar este 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 chaves baseadas em pontuação do reCAPTCHA e use desafios de autenticação multifator (MFA), como desafios de email e SMS nos quais são enviados códigos únicos (OTPs) ao utilizador.
Para usar chaves baseadas em pontuação e desafios personalizados, considere as seguintes opções:
Instale chaves baseadas em pontuações para detetar a automatização em ATOs de grande escala.
Para instalar chaves baseadas em pontuação em páginas Web, consulte o artigo Instale chaves baseadas em pontuação em páginas Web.
Para instalar chaves baseadas em pontuação em aplicações para dispositivos móveis, consulte o artigo Integre o reCAPTCHA com apps Android. ou Integre o reCAPTCHA com apps iOS.
Use a MFA para validar a propriedade da conta no início de sessão ou para ações sensíveis.
Para mais informações, consulte o artigo Configure a autenticação multifator.
Consoante o seu exemplo de utilização, pode usar a MFA de forma autónoma ou com chaves baseadas em pontuações. Por exemplo, pode preferir usar desafios de MFA apenas para pontuações abaixo de um determinado limite para reduzir o atrito.
O exemplo seguinte mostra como integrar chaves baseadas em pontuação no cenário de início de sessão.
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>
Pode experimentar este 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>
O que se segue?
- Para saber mais sobre outras funcionalidades de proteção da conta, consulte o artigo Funcionalidades de proteção das contas de utilizador.