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.