Scarnox · Blog

Como funciona o reCAPTCHA v2 e como resolvê-lo (em breve)

O reCAPTCHA v2 é o captcha clássico do Google. Ele mostra uma caixa de marcação com o texto "Não sou um robô" e, quando não tem certeza sobre o visitante, acrescenta um desafio de imagens. Um solver para ele precisa produzir um token de resposta válido, que o site possa verificar junto ao Google. O suporte da Scarnox ao reCAPTCHA v2 está em breve. Este guia explica como o widget funciona, as abordagens gerais que as pessoas usam hoje e o que esperar de um solver baseado em token.

A Scarnox ainda não resolve o reCAPTCHA v2 em produção. O único tipo de tarefa ativo hoje é o PopularCaptcha, proxyless. Se o seu projeto precisa do reCAPTCHA v2 agora, as abordagens abaixo são as opções realistas.

Como o widget funciona

A página incorpora um elemento contêiner com o atributo data-sitekey. Esse sitekey identifica o site para o Google. Quando o widget carrega, ele roda verificações no navegador, analisando o comportamento do visitante, os cookies e o histórico, e envia uma avaliação de risco ao Google.

Se a avaliação for de baixo risco, a caixa é marcada automaticamente e o widget grava um token em um campo oculto chamado g-recaptcha-response. Se a avaliação for de risco mais alto, o visitante vê um desafio de imagens, como selecionar blocos que contêm determinado objeto. Passar no desafio também grava o token.

O backend do site então envia esse token ao endpoint de verificação do Google, junto com a chave secreta do site. O Google responde com sucesso ou falha. Como a verificação acontece no servidor, um formulário que aceita um token sem checá-lo junto ao Google não está protegido pelo reCAPTCHA de fato.

Por que ele é sinalizado

A caixa de marcação é uma decisão de risco, não um quebra-cabeça. Os gatilhos habituais são:

Entender esses gatilhos importa mais do que o próprio widget. Se o seu tráfego não aciona a caixa de marcação, você nunca vê o desafio de imagens.

Abordagens gerais que funcionam hoje

Estas abordagens são amplamente usadas, e são honestas. Elas reduzem a frequência com que um desafio aparece em trabalhos legítimos.

  1. Mantenha sessões reais. Reutilize cookies e um perfil de navegador consistente ao longo de uma sessão, em vez de começar do zero a cada página.
  2. Controle o ritmo das requisições. Um ritmo constante e lento parece muito mais uma pessoa do que uma rajada.
  3. Use um navegador real para o widget. Um navegador completo com configurações normais tem menos chance de ser sinalizado do que um build headless simplificado. O guia de detecção de navegador headless lista os sinais comuns.
  4. Peça uma exceção ou uma chave de teste. Se você é dono do site, use as chaves de teste publicadas pelo Google em homologação. Se não é, peça ao dono uma lista de permissões.
  5. Mantenha uma pessoa no processo. Para tarefas de baixo volume, uma pessoa pode marcar a caixa e repassar o token. É lento, mas confiável.

Essas abordagens não garantem que um desafio nunca apareça. Elas reduzem a frequência, o que mantém estável um trabalho legítimo.

O que um solver baseado em token vai fazer

Um solver baseado em token para o reCAPTCHA v2 faz o que o PopularCaptcha faz hoje. Ele recebe o sitekey e a URL da página, produz um g-recaptcha-response válido e o devolve ao seu código. Seu código então grava o token no formulário e o envia antes que ele expire.

A Scarnox vai documentar o tipo de tarefa e os campos extras na referência da API quando o suporte ao reCAPTCHA v2 for lançado. Até lá, não construa com base em uma interface presumida. O formato da requisição será semelhante ao exemplo do PopularCaptcha, mas confira a documentação para os valores exatos.

Checklist para um trabalho com reCAPTCHA v2

Ao planejar um trabalho que toca em um formulário com reCAPTCHA v2, confira estes pontos:

Erros comuns

O problema mais frequente em uma integração de reCAPTCHA v2 é um token que o site rejeita mesmo parecendo correto. Três causas respondem pela maioria desses casos. A primeira é a divergência entre o sitekey e a URL da página: o token é vinculado à página em que o widget foi exibido, então um sitekey tirado de uma página e enviado a outra vai falhar. A segunda é um token velho. Os tokens têm vida curta, então um script que resolve primeiro e depois executa uma sequência lenta de outras etapas vai enviar um valor expirado. A terceira é a falta de uma verificação no servidor do seu lado. Se os seus testes só confirmam que um token existe, você não vai perceber que a etapa de verificação está falhando.

Um segundo grupo de erros vem do fluxo ao redor do widget. Fazer login em uma sessão e enviar o formulário a partir de outra é um erro comum, porque a verificação pode depender da sessão que carregou o widget. Tentar reenviar um formulário rejeitado muitas vezes seguidas também faz a sessão parecer suspeita, o que pode transformar um único desafio em uma série deles. Quando algo falha, pause, verifique o estado da página e tente mais uma vez com valores novos.

Faça scraping com responsabilidade

Se o formulário faz parte de um trabalho de scraping, verifique o robots.txt e os termos do site antes de começar. Mantenha a taxa baixa e não colete dados pessoais de que você não precisa. O guia sobre se web scraping é legal cobre as principais considerações.

Próximos passos