///
Como implementar CAPTCHA em HTML: um guia simples para desenvolvedores
Vladlen Vlasov
Vladlen Vlasov
Redator Técnico
March 24, 2026
13 min
Leia os termos de uso do conteúdo fornecido neste site.

Como implementar CAPTCHA em HTML: um guia simples para desenvolvedores

generated-image (37).png

Adicionar um CAPTCHA ao seu formulário HTML é uma das primeiras linhas de defesa mais eficazes contra bots, envios de spam e abuso automatizado. Seja para proteger uma página de login, um formulário de contato ou um fluxo de checkout, o CAPTCHA certo — e a implementação correta — pode fazer uma diferença significativa.

Este guia mostra, passo a passo, como adicionar código de captcha html ao seu projeto, cobrindo quatro opções populares: reCAPTCHA v2 (Checkbox e Invisible)Cloudflare TurnstileProsopo ProcaptchaAltcha. Para cada uma delas, você verá uma explicação completa, exemplos funcionais de código HTML e orientações sobre verificação no backend, testes locais e solução de problemas.

robots
Comece agora e automatize sua solução reCAPTCHA v2

O que você precisa antes de começar

Toda solução de CAPTCHA normalmente funciona em torno do mesmo conceito central: você registra seu site com um provedor, recebe um par de captcha key (uma site key pública e uma secret key privada) e usa essas chaves para incorporar o widget e verificar as respostas.

Veja onde registrar cada provedor antes de escrever uma única linha de HTML:

Provedor

URL de registro

Chaves que você recebe

reCAPTCHA v2

google.com/recaptcha/admin

Site key + Secret key

Cloudflare Turnstile

Painel da Cloudflare → Segurança de aplicativos → Turnstile

Site key + Secret key

Prosopo Procaptcha

prosopo.io

Site key + Secret key

Altcha

Auto-hospedado (não requer registro)

Segredo HMAC definido por você

 Durante o registro, será solicitado que você informe seu nome de domínio. Para desenvolvimento local, adicione localhost à lista de domínios permitidos (mais sobre isso na seção de testes).


reCAPTCHA v2 Checkbox — passo a passo

A caixa de seleção clássica ("I'm not a robot") é o widget de captcha html mais amplamente reconhecido. Ela exibe uma caixa de seleção visível e, quando necessário, um desafio visual com imagens.

Etapa 1: registre-se e obtenha sua captcha key 

Acesse google.com/recaptcha/admin e selecione reCAPTCHA v2 → "I'm not a robot" Checkbox. Adicione seu domínio (incluindo localhost para testes locais) e salve. Você receberá uma Site Key e uma Secret Key.

Etapa 2: adicione o script da API do reCAPTCHA 

Coloque a seguinte tag <script> no <head> do seu HTML ou antes da tag de fechamento </body>:

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

Os atributos asyncdefer garantem que o script seja carregado sem bloquear a renderização da página.

Etapa 3: adicione a div do widget ao seu formulário 

Coloque o elemento <div> dentro do seu formulário, logo antes do botão de envio. Substitua YOUR_SITE_KEY pela site key que você recebeu.

<!DOCTYPE html>  
<html lang="en">  
<head>  
  <meta charset="UTF-8">  
  <title>Formulário de contato</title>  
  <script src="https://www.google.com/recaptcha/api.js" async defer></script>  
</head>  
<body>  
  <form action="/submit" method="POST">  
    <label for="email">Email:</label>  
    <input type="email" id="email" name="email" required>  
    <label for="message">Mensagem:</label>  
    <textarea id="message" name="message" required></textarea>  
    <!-- Widget Checkbox do reCAPTCHA v2 -->  
    <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>  
    <button type="submit">Enviar</button>  
  </form>  
</body>  
</html>

Etapa 4: o que acontece no envio 

Quando o usuário conclui o desafio e envia o formulário, o script do Google adiciona automaticamente um campo oculto chamado g-recaptcha-response aos dados do formulário. Seu backend lê esse token e o envia para a API de verificação do Google junto com sua secret key.


reCAPTCHA v2 Invisible — passo a passo

O Invisible reCAPTCHA remove totalmente a caixa de seleção visível. Em vez disso, ele executa uma análise de risco em segundo plano e só aciona um desafio visual se um comportamento suspeito for detectado — resultando em uma UX mais fluida para a maioria dos usuários.

Etapa 1: registre-se com o tipo correto 

No console de administração do Google reCAPTCHA, selecione reCAPTCHA v2 → Invisible reCAPTCHA badge. Isso gera uma site key diferente da variante com checkbox — não reutilize chaves entre tipos diferentes.

Etapa 2: carregue o script da API 

Use a mesma tag de script da variante com checkbox:

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

Etapa 3: anexe o CAPTCHA ao botão de envio 

Em vez de usar uma <div> separada, você aplica os atributos do CAPTCHA diretamente ao <button> de envio, especificando um callback em JavaScript para ser executado quando o desafio for concluído.

Defina uma função de callback que envie o formulário de forma programática após a verificação ser aprovada.

Exemplo completo de formulário HTML

<!DOCTYPE html>  
<html lang="en">  
<head>  
  <meta charset="UTF-8">  
  <title>Cadastro</title>  
  <script src="https://www.google.com/recaptcha/api.js" async defer></script>  
</head>  
<body>  
  <form id="signup-form" action="/signup" method="POST">  
    <label for="username">Nome de usuário:</label>  
    <input type="text" id="username" name="username" required>  
    <!-- reCAPTCHA Invisible: anexado ao botão -->  
    <button  
      class="g-recaptcha"  
      data-sitekey="YOUR_SITE_KEY"  
      data-callback="onSubmit"  
      data-size="invisible"  
      type="submit">  
      Criar conta  
    </button>  
  </form>  
  <script>  
    function onSubmit(token) {  
      document.getElementById("signup-form").submit();  
    }  
  </script>  
</body>  
</html>

Quando o botão é clicado, o reCAPTCHA executa sua análise em segundo plano, chama onSubmit(token) com um token de resposta, e seu callback envia o formulário. O token é incluído como g-recaptcha-response no corpo do POST.


Cloudflare Turnstile — passo a passo

O Cloudflare Turnstile é uma alternativa de CAPTCHA com foco em privacidade que não rastreia usuários, não define cookies de perfilamento e não exibe quebra-cabeças com imagens. Ele oferece três modos de widget: 

  • Managed: o widget decide se deve mostrar um desafio com base em sinais do navegador)
  • Non-interactive: aprova sem exigir interação do usuário para a maioria dos visitantes
  • Invisible: executa totalmente em segundo plano

Etapa 1: crie um widget no Painel da Cloudflare 

Faça login na sua conta Cloudflare, navegue até Segurança de aplicativos → Turnstile, clique em Add widget, insira seu domínio e selecione um tipo de widget. Copie a Site Key e anote sua Secret Key.

Etapa 2: adicione o script do Turnstile

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Etapa 3: adicione a div do widget ao seu formulário

<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>

O Turnstile injeta automaticamente um input oculto chamado cf-turnstile-response no formulário. Nenhum JavaScript extra é necessário para o envio padrão do formulário.

Exemplo completo de formulário HTML

<!DOCTYPE html>  
<html lang="en">  
<head>  
  <meta charset="UTF-8">  
  <title>Login</title>  
  <script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>  
</head>  
<body>  
  <form action="/login" method="POST">  
    <label for="password">Senha:</label>  
    <input type="password" id="password" name="password" required>  
    <!-- Widget Cloudflare Turnstile -->  
    <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>  
    <button type="submit">Entrar</button>  
  </form>  
</body>  
</html>

O modo Managed do Turnstile determinará — com base em sinais do navegador — se deve mostrar uma interação ou aprovar silenciosamente. Para testes, a Cloudflare fornece dummy site keys especiais (abordadas na seção de testes).


Prosopo Procaptcha — passo a passo

O Prosopo Procaptcha é um CAPTCHA nativo de Web3, com foco em privacidade, projetado como um substituto direto e plug-and-play para o reCAPTCHA. Ele não depende da infraestrutura do Google e foi criado tendo a privacidade do usuário como princípio central de design.

Etapa 1: obtenha sua captcha key da Prosopo 

Registre-se em prosopo.io e crie um novo site para receber sua Site Key.

Etapa 2: carregue o bundle do Procaptcha 

Adicione o script do Procaptcha:

<script src="https://js.prosopo.io/js/procaptcha.bundle.js" async defer></script>

Etapa 3: adicione o widget ao seu formulário 

Coloque uma <div> com a classe procaptcha e sua site key como atributo data-sitekey.

Exemplo completo de formulário HTML

<!DOCTYPE html>  
<html lang="en">  
<head>  
  <meta charset="UTF-8">  
  <title>Cadastro</title>  
  <script type="module" src="https://js.prosopo.io/js/procaptcha.bundle.js" async defer></script>  
</head>  
<body>  
  <form action="/register" method="POST">  
    <label for="email">Email:</label>  
    <input type="email" id="email" name="email" required>  
    <!-- Widget Prosopo Procaptcha -->  
    <div class="procaptcha" data-sitekey="YOUR_SITE_KEY"></div>  
    <button type="submit">Cadastrar</button>  
  </form>  
</body>  
</html>

Etapa 4: envio do token 

No envio do formulário, o Procaptcha injeta um campo oculto chamado procaptcha-response no seu formulário. Envie esse token para a API de verificação da Prosopo junto com sua secret key no backend.


Altcha — passo a passo

O Altcha é um CAPTCHA totalmente open source e auto-hospedado que usa um mecanismo de proof-of-work — o navegador do usuário executa uma pequena tarefa computacional em vez de resolver um quebra-cabeça visual. Ele não coleta dados do usuário, não define cookies de rastreamento e está totalmente em conformidade com o GDPR. Como é auto-hospedado, não há dependência de terceiros.

Etapa 1: carregue o widget do Altcha

Não é necessário registro. Carregue o script do elemento personalizado:

<script async defer type="module"  
  src="https://cdn.jsdelivr.net/gh/altcha-org/altcha/dist/altcha.min.js">  
</script>

Etapa 2: configure o endpoint de challenge 

O Altcha exige um endpoint no servidor que gere um challenge criptográfico (usando uma HMAC secret key definida por você). Esse endpoint é chamado pelo widget antes do envio para buscar um challenge novo. A biblioteca de servidor do Altcha no seu framework cuida disso. A URL do endpoint é passada ao widget por meio do atributo challengeurl.

Etapa 3: adicione o widget ao seu formulário HTML

Exemplo completo de formulário HTML

<!DOCTYPE html>  
<html lang="en">  
<head>  
  <meta charset="UTF-8">  
  <title>Feedback</title>  
  <script async defer type="module"  
    src="https://cdn.jsdelivr.net/gh/altcha-org/altcha/dist/altcha.min.js">  
  </script>  
</head>  
<body>  
  <form action="/feedback" method="POST">  
    <label for="feedback">Seu feedback:</label>  
    <textarea id="feedback" name="feedback" required></textarea>  
    <!-- Widget Altcha -- aponta para seu próprio endpoint de challenge -->  
    <altcha-widget challengeurl="/api/altcha-challenge"></altcha-widget>  
    <button type="submit">Enviar</button>  
  </form>  
</body>  
</html>

Etapa 4: envio do token 

Depois que o proof-of-work é concluído, o Altcha preenche um input oculto chamado altcha com uma carga codificada em base64. Seu backend verifica essa carga com base no seu segredo HMAC — nenhuma chamada de API externa é necessária.


robots
Comece agora e automatize sua solução reCAPTCHA v2

Verificação no backend — como funciona

Independentemente do CAPTCHA que você usar, o padrão de verificação no lado do servidor é o mesmo:

  1. Extraia o token do corpo da requisição POST usando o nome do campo específico de cada provedor (g-recaptcha-responsecf-turnstile-responseprocaptcha-response ou altcha).
  2. Envie o token para o endpoint de verificação do provedor — uma requisição POST que inclui sua secret key e o token do usuário (e, opcionalmente, o endereço IP do usuário no caso do reCAPTCHA).
  3. Faça o parse da resposta JSON — os provedores retornam um indicador de sucesso/falha na resposta. reCAPTCHA e Turnstile usam um campo success: true/false; a Prosopo usa verified: true/false; o Altcha é verificado localmente com base no seu segredo HMAC. Alguns provedores também retornam hostname e timestamp do challenge.
  4. Aceite ou rejeite o envio — se a verificação falhar, retorne um erro ao usuário e não processe os dados do formulário. Se passar, prossiga normalmente.

Endpoints de verificação por provedor:

  • reCAPTCHA v2: [https://www.google.com/recaptcha/api/siteverify](https://www.google.com/recaptcha/api/siteverify)
  • Cloudflare Turnstile: [https://challenges.cloudflare.com/turnstile/v0/siteverify](https://challenges.cloudflare.com/turnstile/v0/siteverify)
  • Prosopo: [https://api.prosopo.io/siteverify](https://api.prosopo.io/siteverify)
  • Altcha: Local — verificado com base no seu próprio segredo HMAC, sem necessidade de chamada externa

⚠️ Nunca use sua site key para verificação no backend — sempre use a secret key. Confundir as duas é um dos erros de integração mais comuns.


Testando seu CAPTCHA HTML em um servidor local

Testar CAPTCHA localmente exige alguns passos extras, já que a maioria dos provedores valida nomes de domínio.

  • reCAPTCHA v2: Adicione localhost à lista de domínios permitidos no console de administração do Google reCAPTCHA. O widget será renderizado e funcionará normalmente em http://localhost.
  • Cloudflare Turnstile: Use as test site keys oficiais da Cloudflare. A chave 1x00000000000000000000AA sempre produz um resultado de aprovação; a 2x00000000000000000000AB sempre falha. Você também pode combinar a site key de aprovação (1x00000000000000000000AA) com a secret key 3x0000000000000000000000000000000AA no backend para simular um erro "timeout-or-duplicate". Troque todas as chaves de teste pelas suas chaves reais de produção antes de fazer o deploy.
  • Prosopo Procaptcha: localhost é compatível por padrão durante o desenvolvimento — nenhuma configuração extra é necessária.
  • Altcha: Como ele é auto-hospedado, localhost funciona nativamente. Apenas certifique-se de que seu endpoint de challenge também esteja rodando localmente.

Use o DevTools → aba Network do navegador para confirmar que o script da API do CAPTCHA foi carregado (HTTP 200) e que o POST do formulário inclui o campo de token esperado.


Solução de problemas comuns

O widget CAPTCHA não é renderizado

  • Verifique novamente se a site key corresponde ao tipo de CAPTCHA que você registrou (chaves de checkbox não funcionam para o modo invisible, e vice-versa).
  • Confirme se a tag <script> da API está presente e é carregada sem erro 404 ou CORS no DevTools.
  • Garanta que o domínio no seu registro corresponda ao domínio de onde você está servindo o conteúdo, inclusive com ou sem www..

O token está ausente no POST do formulário

  • O input oculto só é injetado depois que o challenge é concluído. Se o usuário enviar antes de ele estar pronto, nenhum token será enviado.
  • Para o Invisible reCAPTCHA, certifique-se de que o callback onSubmit acione form.submit() depois que o token estiver disponível, e não antes.
  • Para o Altcha, confirme que seu endpoint de challenge está acessível e retornando um challenge válido.

A verificação no backend retorna uma resposta de falha

  • Verifique se você está enviando a secret key (e não a site key) para o endpoint de verificação.
  • Os tokens normalmente são de uso único — se você estiver tentando novamente o mesmo POST nos testes, gere um token novo a cada vez.
  • Verifique se há dessincronização de relógio: alguns provedores (especialmente o Altcha) rejeitam challenges antigos demais.

Erro de "Invalid domain" ou incompatibilidade de sitekey

  • Em localhost, certifique-se de que localhost (e não 127.0.0.1) está na sua lista de domínios permitidos.
  • Para o Turnstile, mude para a test site key durante o desenvolvimento local.

Widget oculto ou sobreposto a outros elementos

  • Os widgets CAPTCHA são renderizados em iframes com z-index fixo. Se outro elemento (um modal, cabeçalho fixo etc.) tiver um z-index maior, ele poderá encobrir o widget.
  • Defina um z-index explícito no contêiner pai ou verifique se há overflow: hidden em elementos ancestrais cortando o iframe.

Nota de acessibilidade: Todos os quatro provedores deste guia oferecem alternativas acessíveis. reCAPTCHA e Turnstile fornecem desafios de áudio; Prosopo e Altcha são projetados para minimizar o incômodo ao usuário por padrão, reduzindo totalmente a dependência de quebra-cabeças visuais.


Automatizando e testando a resolução de CAPTCHA com CapMonster Cloud

Quando sua implementação de CAPTCHA estiver em produção, talvez você precise testá-la programaticamente — para pipelines de QA, testes de integração ou monitoramento automatizado. Resolver CAPTCHAs manualmente toda vez que um teste roda não é viável em escala.

CapMonster Cloud é um serviço automatizado de resolução de CAPTCHA com tecnologia de IA que oferece suporte aos quatro tipos de CAPTCHA abordados neste guia: reCAPTCHA v2 (checkbox e invisible), Cloudflare Turnstile, Prosopo Procaptcha e Altcha. Ele funciona expondo uma API simples: você envia uma tarefa com a URL da página de destino e a site key, e o serviço retorna um token resolvido pronto para ser injetado no seu formulário.

Como ele se encaixa no fluxo de trabalho de um desenvolvedor:

  • Testes de integração automatizados: execute testes end-to-end em formulários protegidos por CAPTCHA em pipelines de CI/CD sem interação manual.
  • Verificação de QA: confirme que seu backend valida e rejeita tokens corretamente em diferentes condições.
  • Pipelines de coleta de dados em que a interação com páginas protegidas por CAPTCHA faz parte de um fluxo autorizado.

O CapMonster Cloud é compatível com a interface de API amplamente usada, o que significa que ele se integra a muitos frameworks de automação existentes com configuração mínima. Você envia uma tarefa contendo a URL da página e a site key, consulta o resultado e recebe o token — que então injeta como o valor apropriado de campo oculto no formulário.


Conclusão

Implementar uma solução de captcha html não exige infraestrutura complexa — apenas uma tag de script, um elemento de widget, o par correto de captcha key e uma verificação de token no lado do servidor. Cada opção deste guia tem seus próprios pontos fortes: o reCAPTCHA v2 é testado em batalha e amplamente confiável; o Turnstile minimiza o incômodo ao usuário e é amigável à privacidade; a Prosopo oferece uma alternativa nativa de Web3 sem dependência do Google; e o Altcha oferece controle total com uma infraestrutura auto-hospedada e open source.

Pronto para começar? Escolha o CAPTCHA que melhor se adapta às suas exigências de privacidade, UX e infraestrutura, registre sua site key e use os exemplos de código acima para adicioná-lo ao seu formulário em minutos. Se você precisar automatizar testes ou QA nos seus formulários protegidos, CapMonster Cloud oferece suporte aos quatro provedores e se integra diretamente aos seus pipelines existentes.


NB: Por favor, observe que o produto é destinado à automação de testes exclusivamente em seus próprios sites e em recursos para os quais você possui autorização legal de acesso.
ItGuy
geear
Programa de afiliados para desenvolvedores de software
Ganhe até 30% dos gastos dos seus usuários com a evasão de captcha
✅ Solicitação enviada
Obrigado pelo seu interesse em nosso programa de parcerias! Entraremos em contato com você dentro de 7 dias úteis.
Solicitação para participar
Preencha o formulário para enviar uma solicitação para o programa de afiliados.
Mais artigos