Pular para o conteúdo

Bot Management

O Bot Management separa gente de script no seu site e decide o que cada visitante recebe: passa, é desafiado ou é barrado. Ele dá uma nota a cada visitante a partir dos sinais do próprio navegador, desafia as páginas que você escolhe com uma prova de trabalho que o navegador resolve sozinho, deixa entrar os robôs de busca verificados e barra impostores, robôs de IA e scanners.

O Bot Management roda no conector, então funciona do mesmo jeito em cada um, com duas exceções:

ConectorO que funciona
Proxy do QlyneTudo desta página
Hospedado pelo QlyneTudo desta página
Worker da CloudflareTudo, menos a detecção de impostores e o desafio para navegadores que nunca rodaram o script. A impressão TLS precisa do Bot Management da própria Cloudflare (Enterprise).

O captcha para qualquer formulário funciona em qualquer site, com ou sem conector.

  1. Conecte o site (Escolha a integração).
  2. Abra o site e vá em Bot Management › Configuração.
  3. Escolha um nível de proteção e, se precisar, ajuste em Avançado.
  4. Deixe Conector › Configuração, “Modo”, em “Só observando” por um ou dois dias, depois passe para “Aplicar”.

As mudanças chegam ao conector em até um minuto.

O nível no topo de Bot Management › Configuração preenche os campos de Avançado e salva. Mude qualquer um deles à mão e o nível aparece como “Personalizado”.

CampoBásicoEquilibradoAgressivo
Dificuldade345
Clique para confirmarNuncaNuncaNa dúvida
Dar nota aos visitantesdesligadoligadoligado
Nota média, de 30 a 59NadaNadaDesafio
Nota alta, 60 ou maisNadaDesafioBloquear
Robôs de IAnenhumtreinotreino e busca com IA
Caminhos da armadilhanenhumsegredos, ferramentas de adminsegredos, ferramentas de admin
Bloquear por (armadilha)1 hora1 hora24 horas

Tor e reputação compartilhada seguem o nível de WAF & Firewall: o Básico deixa o Tor em paz e só avisa o seu app sobre endereços da lista; o Equilibrado desafia os dois; o Agressivo bloqueia os dois.

O nível nunca mexe no que é do seu site: rotas com desafio, rotas que exigem a nota, a página isca, os seus caminhos de armadilha, a validade do desafio, “Desafiar navegadores que nunca rodaram o script” e o modo sob ataque.

“Usar o conjunto recomendado”, ao lado de Salvar as regras, liga a armadilha para segredos e ferramentas de admin e barra os robôs que treinam IA. No Pro, também desafia /checkout*, /login e /signup (se você ainda não tem rotas com desafio), liga a nota e desafia a nota alta.

No Free, os campos do Pro que o nível preenche ficam salvos e passam a valer quando a conta estiver no Pro.

Tudo abaixo fica em Bot Management › Configuração, Avançado, menos o Tor e a reputação compartilhada, que ficam em WAF & Firewall › Configuração.

Uma prova de trabalho que o navegador resolve antes de a página abrir. A pessoa vê uma página curta, “Verificando o navegador”, que segue sozinha; o script precisa fazer a conta ou para ali.

  • “Rotas com desafio”: páginas que os robôs procuram, como /checkout*, /login, /signup. * no fim cobre tudo abaixo.
  • “Dificuldade”, de 1 a 6: cada passo multiplica o trabalho por 16. No 4 leva cerca de um segundo num celular; no 5, até 15 segundos. É o ponto de partida: sobe no modo sob ataque e para o endereço que pede muitos desafios em 10 minutos.
  • “Validade, em minutos”, de 5 a 1440 (30 por padrão): quanto tempo um desafio resolvido vale. A liberação é um cookie, qlyne_clr, amarrado ao IP (o /64 no IPv6) e ao navegador.
  • “Clique para confirmar”: “Nunca” (o navegador faz a conta sozinho), “Na dúvida” (um clique em “Sou uma pessoa” só quando a nota não é baixa ou o endereço pediu muitos desafios) ou “Sempre”. Vale também para o captcha de formulário. Clique disparado por script, ou no computador sem o ponteiro ter mexido antes, é recusado.

Navegador controlado por Selenium, Puppeteer ou Playwright, do jeito que vêm, não ganha a liberação. Cliente que copia o user agent de um navegador sem os cabeçalhos que esse navegador sempre manda em HTTPS também é recusado.

O botão “Sob ataque”, no topo da página, desafia toda página vista sem o cookie de liberação. Chamadas de API não são desafiadas, então apps e integrações seguem funcionando.

Com “Dar nota aos visitantes” ligado, o conector põe um script pequeno, /__qlyne/s.js, nas suas páginas HTML, servido do seu próprio domínio.

Alguns segundos depois de a página abrir, depois de um clique ou tecla, e quando o visitante envia um formulário ou sai, o script manda um resumo para /__qlyne/s. O resumo diz se o navegador informa ser automatizado, quantos idiomas, plugins, núcleos de processador e pontos de toque ele informa, o tamanho da tela e se tem fuso horário. Ele também conta quantas vezes o ponteiro mexeu, o visitante clicou, digitou, rolou ou tocou, e quantos desses eventos um script disparou. Manda só contagens: nunca teclas, texto ou onde o ponteiro estava.

Desse resumo, e de os cabeçalhos do pedido baterem ou não com o navegador do user agent, o conector dá uma nota de 0 a 100. Abaixo de 30 é baixa, de 30 a 59 média, de 60 para cima alta. A nota fica 30 minutos no cookie qlyne_bs, cifrado e amarrado ao IP e ao navegador, então o visitante não consegue ler nem mudar a nota.

O seu app recebe a nota em Qlyne-Bot-Score, com os motivos em Qlyne-Bot-Reasons (como automation,no_interaction). Esta parte funciona no Free.

No Pro, escolha o que a nota média e a alta recebem:

  • “Nada, só avisar o meu app”;
  • “Atrasar 3 segundos”;
  • “Desafio”, ou “Desafio com clique”;
  • “Bloquear”, um 403;
  • “Mostrar a página-isca”: uma página do seu site que o robô recebe no lugar da que pediu, no mesmo endereço. Ele segue raspando algo que não vale nada. Preencha “Página isca” com o caminho dela.

“Rotas que exigem a nota” (Pro) recusam formulário ou chamada de API (tudo que não é GET) de um navegador que não rodou o script, com 403 e {"code": "SENSOR_REQUIRED"}. Use nas rotas que robô chama direto, como a API de checkout ou de cadastro. Quem resolveu o desafio passa.

“Desafiar navegadores que nunca rodaram o script” (Pro; só no proxy do Qlyne e no hospedado): o navegador que abre uma página sem nunca ter rodado o script, nem resolvido um desafio, recebe o desafio invisível. O navegador de verdade resolve e segue; curl e ferramentas headless param ali. Arquivos estáticos, chamadas de API e robôs verificados ficam de fora.

Googlebot e Bingbot são reconhecidos pelas faixas de IP que o Google e a Microsoft publicam, que o Qlyne mantém atualizadas para todas as contas. Robô verificado pula o desafio (em qualquer rota, modo sob ataque incluído), a armadilha para scanner e o bloqueio por reputação compartilhada. O seu app recebe Qlyne-Verified-Bot com googlebot ou bingbot.

No proxy do Qlyne e no hospedado, o pedido cujo user agent diz Googlebot ou Bingbot mas vem de fora dessas faixas é barrado como impostor. Não precisa de configuração e funciona no Free.

O ChatGPT agent navega com user agent de Chrome, então nem o nome nem o IP o distinguem. Em vez disso ele assina cada pedido (HTTP Message Signatures, o protocolo Web Bot Auth), e no proxy do Qlyne e no hospedado essa assinatura é conferida com a chave que a OpenAI publica, que o Qlyne busca para todas as contas. Assinatura válida recebe o mesmo tratamento de robô verificado, com Qlyne-Verified-Bot: chatgpt-agent; se você barra assistentes de IA, o agente assinado é barrado junto. O pedido que diz ser o ChatGPT agent sem assinatura, ou com assinatura que não confere com a chave da OpenAI, é barrado como impostor. Assinatura feita com um keyid que o Qlyne não conhece passa sem o rótulo e segue as suas outras configurações. Se o Qlyne não tem uma chave em dia, nada é barrado por assinatura e o pedido segue as suas outras configurações.

Escolha as categorias a barrar:

  • “Robôs que treinam modelos de IA”: GPTBot, ClaudeBot, CCBot, Bytespider e outros.
  • “Robôs de busca com IA”: OAI-SearchBot, Claude-SearchBot, PerplexityBot. As suas páginas deixam de aparecer como fonte nessas respostas.
  • “Assistentes de IA abrindo uma página a pedido de alguém”: ChatGPT-User, Claude-User, Perplexity-User.

O robô barrado recebe um 403. O seu /robots.txt é servido com um grupo Disallow: / para esses robôs acrescentado no fim. A busca do Google e do Bing não é afetada.

No Worker da Cloudflare, o conector precisa rodar no site inteiro (uma rota como example.com/*), robots.txt incluído.

Scanners pedem caminhos que nenhum visitante pede: /.env, /.git/config, /phpmyadmin, /wp-login.php num site sem WordPress. Em “Caminhos da armadilha”, escolha os grupos:

  • “Segredos e arquivos de código”: /.env, /.git, /.aws, backups e dumps de banco.
  • “Ferramentas de admin que você não usa”: phpMyAdmin, Adminer, cgi-bin, PHPUnit e exploits de roteador.
  • “Caminhos do WordPress”: /wp-login.php, /wp-admin, /xmlrpc.php. Deixe desligado se o seu site usa WordPress.

Acrescente os seus em “Os seus caminhos de armadilha”, como um endereço de admin antigo ou um link que só robô segue. Quem pede um deles leva um 404 comum, sem sinal de que era armadilha. Depois fica bloqueado em todas as rotas pelo tempo de “Bloquear por”: 15 minutos, 1 hora ou 24 horas. No IPv6, o bloqueio vale para o /64.

O conector que pegou bloqueia na hora; os outros Workers ou proxies do site ficam sabendo em até um minuto. Googlebot, Bingbot e endereços de confiança nunca caem. Bot Management › Visão geral lista os endereços presos pela armadilha e quando cada um sai.

Em WAF & Firewall › Configuração, “Endereços IP”, “Saídas do Tor” usa a lista pública do Tor Project, atualizada a cada hora. “Desafiar toda página” ou “Bloquear”; chamadas de API não são desafiadas.

Em WAF & Firewall › Configuração, “Reputação compartilhada” lista os endereços que sites de outras contas do Qlyne viram atacando nas últimas 24 horas. Ou seja, pegos pela armadilha para scanner ou pelas regras gerenciadas, com nota de robô alta, usando navegador automatizado ou recusados pelo captcha de formulário. Um endereço só entra na lista quando pelo menos duas contas o relatam, então nenhuma conta sozinha põe alguém nela. No IPv6 a lista guarda o /64.

“O que um endereço da lista recebe”:

  • “Nada”;
  • “Avisar” (o padrão, também no Free): o seu app recebe Qlyne-Reputation: 1;
  • “Desafio” (Pro): as páginas vistas por ele recebem o desafio; chamadas de API passam;
  • “Bloquear” (Pro): 403. Googlebot e Bingbot nunca são bloqueados por ela.

Endereços de confiança passam direto. “Relatar ataques neste site” (ligado por padrão) põe o endereço desses ataques na lista compartilhada. Por 24 horas a lista guarda o endereço e o id da sua conta, que é como ela conta quantas contas o relataram. Nunca guarda o caminho, o user agent ou qual site foi. Desligar não impede você de usar a lista. Como esses dados são tratados está nos termos e na política de privacidade.

Ao abrir a conexão, o navegador lista as versões do TLS, as cifras e as extensões que aceita. Essa lista, resumida numa impressão digital JA4 como t13d1516h2_8daaf6152771_d8a2da3f94cd, depende do programa e não do user agent que ele diz ter. Um script que copia o user agent do Chrome continua conectando como script.

Não há campo para configurar. Quando o conector tem a impressão digital, o seu app recebe Qlyne-JA4, a tela Eventos mostra o valor ao lado do user agent, e as suas regras podem usá-lo. A nota de robô soma tls quando o user agent diz ser um Chrome, Firefox ou Safari recente mas a conexão não usa TLS 1.3 ou não oferece HTTP/2. Proxy de empresa que inspeciona o HTTPS também troca a impressão digital, então isso só leva a nota à faixa média e nunca bloqueia sozinho.

O hospedado tem a impressão digital de todo visitante. O proxy do Qlyne tem quando o HTTPS termina nele: veja Impressão digital do TLS na página do proxy. Na Cloudflare, precisa do Bot Management da própria Cloudflare, um plano Enterprise.

Para formulários num site sem conector, ou numa página que você não quer desafiar inteira. O navegador resolve uma prova de trabalho curta, sem quebra-cabeça, e o formulário leva um token que o seu servidor confere uma vez. Configuração e código: Captcha para qualquer formulário.

As páginas saem em inglês ou português, pelo idioma do navegador do visitante. Pedido que não pede HTML (uma chamada de API) recebe JSON com o mesmo status.

  • Desafio: uma página 403 com o título “Verificando o navegador” e o texto “Leva alguns segundos. A página abre sozinha.” A página abre por conta própria quando o navegador termina a conta. Chamadas de API recebem {"code": "CHALLENGE_REQUIRED"}.
  • Desafio com clique: “Confirme que você é uma pessoa”, com o botão “Sou uma pessoa”.
  • Sem JavaScript: as duas páginas de desafio dizem “Ative o JavaScript para continuar nesta página.”
  • Bloqueio (nota alta com “Bloquear”, impostor, armadilha, reputação compartilhada, Tor): uma página 403 com o título “Acesso bloqueado” e o texto “Este site recusou o acesso a partir da sua conexão. Se acha que é um engano, fale com o site.” Sem regra, sem IP, sem falar em robô. Chamadas de API recebem {"code": "ACCESS_BLOCKED"}.
  • Armadilha para scanner: um 404 em texto puro, “Not found”.
  • Robô de IA: um 403 em texto puro.
  • “Atrasar 3 segundos”: a página normal, 3 segundos depois.
  • Isca: a página isca, no endereço que foi pedido.

As páginas de desafio e de bloqueio dizem “Protegido por Qlyne” no rodapé.

Em 2026-10-18, uma rodada de seis clientes contra demo.qlyne.com (hospedado, com “Desafiar navegadores que nunca rodaram o script” ligado) deu:

ClienteResultado
User agent de Googlebot vindo de fora das faixas do GoogleBarrado
User agent de Bingbot vindo de fora das faixas da MicrosoftBarrado
GPTBotBarrado
User agent de Chrome sem os cabeçalhos que o Chrome mandaDesafiado
User agent e cabeçalhos de um Chrome recente, sem JavaScriptDesafiado
curl pedindo qualquer coisa que não seja páginaPassou
  • A lista de robôs verificados é a mesma para todas as contas: Googlebot e Bingbot, conferidos pela faixa de IP. Não dá para acrescentar outros. Os outros buscadores (DuckDuckBot, Applebot, Yandex) são tratados como qualquer visitante, então o desafio de uma página vale para eles também.
  • A nota precisa do script. A primeira página vista ainda não tem nota, então as ações valem a partir do pedido seguinte. Clientes de API e robôs nunca rodam o script, então nunca têm nota.
  • O desafio encarece o robô; não impede um robô determinado. Um navegador de verdade que esconde as marcas de automação passa depois de resolver a prova de trabalho.
  • O robô de IA é reconhecido pelo user agent que declara. O que finge ser navegador é tratado como navegador e cai nas outras regras.
  • Robô verificado pula o desafio, a armadilha e o bloqueio por reputação, não tudo. A sua lista de IPs bloqueados, os limites de pedidos e as suas regras valem para ele como para qualquer um.
  • A detecção de impostores e “Desafiar navegadores que nunca rodaram o script” estão no proxy do Qlyne e no hospedado, não no Worker da Cloudflare.
  • Comece no modo observar. As contagens mostram o que seria desafiado ou barrado antes de alguém ser recusado.

Não, quando ele vem do Google. Googlebot e Bingbot das faixas publicadas pulam o desafio, a armadilha e o bloqueio por reputação, e as suas escolhas de robôs de IA não mexem na busca do Google nem do Bing. O que ainda pode pará-los é o que você mesmo configura: um IP bloqueado, um limite de pedidos ou uma das suas regras. O pedido que só diz ser Googlebot, vindo de outra rede, é barrado no proxy do Qlyne e no hospedado.

As páginas sem desafio abrem normalmente, e o visitante fica sem nota de robô. A página com desafio pede para ativar o JavaScript e não abre enquanto isso não acontece. Com “Desafiar navegadores que nunca rodaram o script” ligado, isso vale para toda página vista; deixe desligado se o seu público precisa de páginas sem JavaScript.

O conector decide com as regras que guarda na memória e não chama o Qlyne a cada pedido. Medido em 2026-10-11, do mesmo servidor, a loja da demo respondeu pelo proxy do Qlyne em 3 ms na mediana, e a página do desafio em 2 ms. Isso deixa de fora a rede entre o seu visitante e o seu servidor. A pessoa só espera numa página com desafio, cerca de um segundo num celular na dificuldade 4, e uma vez por validade.

Bot Management › Visão geral mostra as contagens do período que você escolher (24 horas por padrão), a divisão entre notas baixa, média e alta, e os endereços presos pela armadilha. Eventos lista cada decisão com o motivo, os motivos da nota em palavras, o user agent e a impressão TLS, e exporta para CSV. No modo observar, os mesmos lugares mostram o que teria acontecido. Mais em Eventos e relatórios.

Em parte. No Free: a nota de robô enviada ao seu app, robôs verificados, a detecção de impostores, robôs de IA, a armadilha para scanner, a reputação compartilhada como aviso ao seu app, a impressão TLS e o captcha de formulário. O Pro acrescenta o que desafia ou barra o visitante por julgamento: o desafio e o modo sob ataque, as ações por faixa de nota, as rotas que exigem a nota, o desafio para navegadores sem o script, o Tor, e desafiar ou bloquear endereços da lista. Toda conta nova começa com 7 dias de Pro, sem cartão. Veja Planos.

Confira “Modo” em Conector › Configuração. Em “Só observando”, o conector conta o que faria (“Desafiaria”, “Barraria pela nota de robô”) e deixa todo mundo passar. Passe para “Aplicar” quando os números fizerem sentido. Se o site está no Free, o desafio, as ações por nota, o Tor e as ações de reputação ficam salvos mas não valem; a página mostra o aviso “Plano grátis”. No nível Básico a nota fica desligada.

O cookie de liberação é amarrado ao IP e ao navegador, e é Secure. Procure:

  • site servido em HTTP puro: o navegador não guarda cookie Secure, então o desafio nunca libera;
  • visitante cujo IP muda a cada pedido, como algumas redes móveis, VPNs ou proxies de empresa com várias saídas;
  • navegador que bloqueia cookies do seu site;
  • teste com Selenium, Puppeteer ou Playwright, que nunca ganha a liberação. Ponha o endereço da máquina de teste na lista de confiança em WAF & Firewall › Regras de IP.

Abra Eventos e ache o pedido: o motivo diz qual regra parou.

  • “Googlebot, Bingbot ou ChatGPT agent falso barrado”: o pedido não veio das faixas do Google ou da Microsoft, ou disse ser o ChatGPT agent sem assinatura válida. Ferramentas de SEO costumam mandar o user agent do Googlebot, e esse bloqueio é o resultado esperado.
  • Um IP bloqueado, um limite de pedidos ou uma das suas regras: robôs verificados não escapam deles. Tire o endereço da lista de bloqueados em WAF & Firewall › Regras de IP. Para um limite ou uma regra, no Pro, ponha no topo das suas regras uma com “Robô de busca verificado” “é sim” e “Deixar passar, pulando as outras regras”.
  • Outro buscador (DuckDuckBot, Applebot): ele não está na lista de verificados, então o desafio vale para ele. Desligue “Desafiar navegadores que nunca rodaram o script”, ou deixe passar por uma regra no user agent dele. Qualquer um manda esse user agent, então a regra deixa passar também os impostores desse robô.