logo
bars

Cloudflare Turnstile
e CapMonster Cloud

Solução de CAPTCHA, instalação no site e testes.
Herdou um site com captcha ou outra proteção mas sem acesso ao código-fonte? É natural perguntar qual solução está instalada, se está configurada corretamente e como testá-la.

Neste artigo procurámos responder a todas as questões importantes. Para começar a resolver o problema, o primeiro passo é identificar que sistema de proteção está a ser utilizado. Para isso, pode consultar a lista de captchas e sistemas de proteção antibot mais populares, onde encontrará exemplos visuais e sinais principais que ajudam a perceber rapidamente com o que está a lidar.

Se verificar que o seu site utiliza Cloudflare Turnstile, o passo seguinte é analisar mais detalhadamente as suas características e o seu funcionamento. Neste mesmo artigo também pode consultar o guia de integração de Cloudflare Turnstile, para compreender totalmente como o sistema funciona no seu site. Isto permitirá não só entender a proteção atual, como também planear corretamente a sua manutenção.

O que é Cloudflare Turnstile
O que é Cloudflare Turnstile
Cloudflare Turnstile é um CAPTCHA moderno da Cloudflare que protege sites de ações automatizadas. Para os visitantes do site, a verificação é quase invisível, não há necessidade de completar tarefas: geralmente basta um clique na caixa de seleção, após o qual o sistema decide se permite a passagem do visitante ou o bloqueia em caso de suspeita de bot. Ao contrário do Cloudflare Challenge, o CAPTCHA Turnstile é colocado diretamente no site, não em uma janela separada—geralmente em formulários de login ou registro.

Como resolver Cloudflare Turnstile via CapMonster Cloud

Ao testar formulários que incluem Cloudflare Turnstile, é comum precisar verificar se a captcha foi integrada e funciona corretamente.

Pode testar manualmente a captcha incorporada no seu site.

  • Abra a página do formulário e confirme que a captcha é apresentada.
  • Tente enviar o formulário sem resolvê-la — o servidor deve devolver um erro.
  • Após uma resolução bem-sucedida, o formulário deve ser enviado sem problemas.

Para resolução automática recorra a ferramentas como o CapMonster Cloud, que recebe os parâmetros da captcha, processa-os nos seus servidores e devolve um token pronto. Basta inseri-lo no formulário para ultrapassar a verificação sem interação do utilizador.

Trabalhar com o CapMonster Cloud através da API normalmente envolve os passos seguintes:

Criação da tarefaCriação da tarefa
arrow
Envio do pedido APIEnvio do pedido API
arrow
Receção do resultadoReceção do resultado
arrow
Aplicação do token na páginaAplicação do token na página
arrow
Reconhecimento de Cloudflare Turnstile usando bibliotecas prontas
O serviço CapMonster Cloud fornece bibliotecas prontas para trabalho conveniente nas linguagens Python, JavaScript (Node.js) e C#.
Python
JavaScript
C#
Solução, inserção de token e envio de formulário
Exemplo em Node.js para o ciclo completo de reconhecimento de CAPTCHA em sua página web. Abordagens possíveis: usar solicitações HTTP para obter HTML e parâmetros do CAPTCHA, enviar a resposta e processar o resultado; ou com ferramentas de automação (por exemplo, Playwright)—abrir a página, aguardar o CAPTCHA, enviar parâmetros (para testes você pode enviar dados corretos e incorretos), obter a solução via cliente CapMonster Cloud, inserir o token no formulário e ver o resultado.
// npm install playwright @zennolab_com/capmonstercloud-client

import { chromium } from "playwright";
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from "@zennolab_com/capmonstercloud-client";

async function main() {
  // 1. Resolver Turnstile via CapMonster Cloud
  const cmcClient = CapMonsterCloudClientFactory.Create(
    new ClientOptions({ clientKey: 'YOUR_CAPMONSTER_API_KEY' })
  );

  const turnstileRequest = new TurnstileRequest({
    websiteURL: 'http://tsmanaged.zlsupport.com',
    websiteKey: '0x4AAAAAAABUYP0XeMJF0xoy',
  });

  const result = await cmcClient.Solve(turnstileRequest);
  const token = result.solution.token;
  console.log('Token Turnstile recebido:', token);

  // 2. Iniciando Playwright
  const browser = await chromium.launch({ headless: false });
  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto('http://tsmanaged.zlsupport.com');

  // 3. Preenchendo login e senha
  await page.fill('#username', 'your_username');
  await page.fill('#password', 'your_password');

  // 4. Aguardando o aparecimento do campo de token oculto
  await page.waitForSelector('#token', { state: 'attached', timeout: 60000 });

  // 5. Inserindo token e tornando o campo visível
  await page.evaluate((t) => {
    const tokenInput = document.querySelector('#token');
    if (tokenInput) {
      tokenInput.type = 'text';  // tornar o campo visível
      tokenInput.value = t;      // inserir token
      console.log('Token inserido no campo token');
    } else {
      console.error('Campo #token não encontrado');
    }
  }, token);

  // 6. Verificando se o token foi realmente inserido
  const checkValue = await page.$eval('#token', el => el.value);
  console.log('Verificação do valor do token:', checkValue);

  // 7. Enviando formulário
  await page.click('button[type="submit"]');
  console.log('Formulário enviado com token Turnstile');

  // await browser.close();
}

main().catch(err => console.error(err));
Como conectar Cloudflare Turnstile ao seu site
Para navegar com confiança no funcionamento do CAPTCHA em seu site, entender a lógica de sua verificação, reconectá-lo ou reconfigurá-lo, recomendamos estudar esta seção. Ela descreve o processo de conexão da proteção—isso ajudará a entender rapidamente todas as nuances.

1. Vá para a página Cloudflare Turnstile, clique em Começar agora.

2. Registre-se no serviço.

3. Em Turnstile Widgets, clique no botão azul Add Widget.

HowTo Connect image 1

4. Configure o Cloudflare Turnstile, especifique:

  • Widget name—nome do CAPTCHA (para conveniência, por exemplo, Login form).
  • Hostname Management—domínios onde o CAPTCHA funcionará (por exemplo, example.com).
  • Widget Mode:
    • Managed—opção ideal, o CAPTCHA decide por si só se mostra a caixa de seleção.
    • Non-interactive—a verificação é realizada automaticamente sem cliques.
    • Invisible—completamente invisível.
  • Pre-clearance—defina como Yes se o site passa pelo Cloudflare Proxy (para não repetir o CAPTCHA).

5. Após criar o widget, você receberá duas chaves—Site Key e Secret Key.

HowTo Connect image 2

6. Conecte a parte do cliente

1) Conecte o script Turnstile

Renderização automática (o widget é criado automaticamente ao carregar a página):

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

Controle programático (você mesmo cria o widget via JavaScript):

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

Importante: o script deve ser carregado do URL exato. Proxy ou cache podem causar falhas.

2) Crie um contêiner para o widget

Automático:

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

Programaticamente:

<div id="turnstile-container"></div>

3) Configuração do widget

Via atributos data:

<div class="cf-turnstile"
            data-sitekey="<YOUR_SITEKEY>"
            data-theme="light"
            data-size="normal"
            data-callback="onSuccess">
          </div>

Via JavaScript:

const widgetId = turnstile.render("#turnstile-container", {
  sitekey: "<YOUR_SITEKEY>",
  theme: "light",
  size: "normal",
  callback: token => console.log("Token:", token)
});

4) Trabalhando com tokens

const token = turnstile.getResponse(widgetId);      // obter token
const isExpired = turnstile.isExpired(widgetId);    // verificar expiração
turnstile.reset(widgetId);                          // redefinir
turnstile.remove(widgetId);                         // remover
turnstile.execute("#turnstile-container");         // execução manual

5) Integração com formulário

<form id="my-form" method="POST">
  <input type="hidden" name="cf-turnstile-response" id="cf-turnstile-response">
  <button type="submit">Enviar</button>
</form>

<script>
function onSuccess(token) {
  document.getElementById("cf-turnstile-response").value = token;
}
</script>

Exemplo de códigoExemplo de código
arrow

6) Configure a parte do servidor

Processo de verificação do lado do servidor:

  • Cliente: o usuário completa o Turnstile na página → o token é criado.
  • Formulário é enviado: o token junto com os dados do formulário é enviado ao servidor.
  • Servidor: faz uma solicitação POST para a API Siteverify da Cloudflare com o token e o segredo.
  • Cloudflare: retorna JSON com o resultado (success: true/false) e informações adicionais (action, hostname, tempo de conclusão).
  • Servidor: decide se permite ou rejeita a ação do usuário.

API Siteverify:

POST
https://challenges.cloudflare.com/turnstile/v0/siteverify

Parâmetros da solicitação:

  • secret (obrigatório): chave secreta Turnstile do painel Cloudflare
  • response (obrigatório): token recebido no cliente
  • remoteip (opcional): endereço IP do usuário (recomendado)
  • idempotency_key (opcional): UUID único para proteção contra verificações repetidas

Propriedades do token:

  • Comprimento máximo: 2048 caracteres
  • Válido por 5 minutos
  • Uso único
  • Quando expirado ou reverificado, a API retornará o erro timeout-or-duplicate

Exemplo de verificação em PHPExemplo de verificação em PHP
arrow

Background
Possíveis erros e depuração
Bug Icon
Parâmetros incorretos
O CAPTCHA não é exibido ou retorna erros como invalid-input-secret, missing-input-response, invalid-input-response. Verifique a validade de sitekey e secret key, bem como as configurações no Painel Cloudflare.
Bug Icon
Tempo limite da solução
O token expirou (válido por 300 segundos) ou não foi recebido a tempo. Garanta uma conexão estável e integração correta com a API.
Bug Icon
Token vazio ou incorreto
O parâmetro cf-turnstile-response está ausente ou incorreto. Verifique a transferência do token para o formulário e servidor.
Bug Icon
Resposta success=false
O token é inválido, expirado ou já foi usado. Cada token só pode ser verificado uma vez. Ative o registro de solicitações e respostas Siteverify para análise.
Verificações de robustez
Depois da integração, certifique-se de que o sistema protege efetivamente o site contra ações automatizadas.
Recomendações de segurança e otimização
Verifique os tokens apenas no servidor, nunca chame a API Siteverify do frontend—isso exporá sua chave secreta.
Use variáveis de ambiente ou um sistema de gerenciamento de segredos em vez de armazenar chaves no código.
Verifique campos adicionais (<b>hostname</b>, <b>action</b>) para garantir que a solicitação veio do seu site.
Use HTTPS—todas as chamadas para Siteverify devem ser feitas através de uma conexão segura.
Implemente tratamento de erros—quando a API não estiver disponível, mostre ao usuário uma mensagem clara sem revelar dados internos.
Restrinja o uso da sitekey por domínios.
Adicione links para a <b>Política de Privacidade</b> e os <b>Termos de Serviço da Cloudflare</b> ao formulário se exigido por sua organização ou política de privacidade.
Conclusão

Se herdou um site que já tem um captcha ou outro sistema de proteção instalado e não tem acesso ao código, não há problema! É bastante fácil identificar qual a tecnologia que está a ser utilizada. Para verificar se tudo está a funcionar corretamente, pode usar o serviço de reconhecimento CapMonster Cloud num ambiente de teste isolado, para garantir que o mecanismo de processamento de tokens e a lógica de verificação estão a funcionar corretamente.

No caso de Cloudflare Turnstile, basta identificar o sistema, analisar o seu comportamento e confirmar que a proteção está a funcionar corretamente. No artigo, mostramos como identificar Cloudflare Turnstile e onde encontrar instruções para a sua integração ou reconfiguração, para que possa manter a proteção com confiança e controlar o seu funcionamento.

Conclusion