O que são armadilhas honeypot e como afetam o scraping?

Publicado:

15 min de leitura

Acar Diveroli
Autor: Acar Diveroli
Uma plataforma de cartões de links com uma armadilha em forma de favo no meio e um cabo tracejado chegando a ela a partir de um bot

No HTML de uma loja online há um link que nunca aparece na página: escondido com display: none, sem texto e apontando para /product/special-offer-7781. Nenhuma pessoa navegando pela página em um navegador vê ou clica nesse link. Já um scraper que coleta todas as tags <a href> da página e as visita uma a uma o encontra e abre. Nesse momento, o site sabe com certeza que a visita não veio de uma pessoa. Esse link é uma armadilha honeypot.

Neste artigo, explicamos o que o termo honeypot significa em segurança e no web scraping, como funcionam as armadilhas de links escondidos e de formulários, o que acontece com um scraper que cai em uma delas e por que os scrapers caem. O enquadramento fica claro desde o início: o objetivo não é "burlar" honeypots, e sim não seguir caminhos que o site não quer que sejam visitados. Um crawler que segue as regras e mantém o escopo restrito já fica longe dessas armadilhas; mostramos como com um exemplo em Playwright.

O que é um honeypot?

O termo "honeypot" vem da segurança da informação. Um honeypot usado por equipes de segurança é um sistema montado de propósito para atrair atacantes, sem nenhuma função real: um servidor que parece desprotegido, um banco de dados falso ou uma conta de usuário que nunca é usada. Um usuário legítimo não tem motivo para acessar um sistema assim, então todo acesso é suspeito e dá informações sobre os métodos do atacante.

Um honeypot no web scraping aplica a mesma ideia na escala de uma página web:

CaracterísticaHoneypot de segurançaHoneypot de scraping
Qual é o alvo?Atacantes tentando invadir uma redeCrawlers automatizados e bots de formulário
FormaServidor, serviço ou conta falsosLink escondido, campo de formulário escondido, página armadilha
Lógica de detecçãoUm usuário legítimo nunca acessa o sistemaUma pessoa nunca vê nem clica no link
ResultadoRastreamento do atacante, alertasMarcação do IP ou da sessão, bloqueio, dados falsos
Quem monta?Equipes de segurançaDonos de sites, serviços de gerenciamento de bots

Honeypots são uma das técnicas de defesa contra ataques automatizados como scraping, criação de contas e spam, que a OWASP classifica no projeto Automated Threats to Web Applications. A força dessas defesas é serem baratas: uma única linha de HTML dá detecção de bots com alta certeza.

Uma armadilha de link escondido funciona em quatro etapas:

  1. O site coloca um link na página e o esconde dos visitantes humanos.
  2. O endereço do link não é usado em nenhum outro lugar. Geralmente também está fechado no robots.txt, para que bots de buscadores que seguem as regras também não vão até lá.
  3. Um scraper que coleta todos os links da página adiciona esse endereço à lista e o visita.
  4. O site registra a requisição a esse endereço e marca como bot o endereço IP, a sessão ou a impressão digital do navegador que a fez.

Formas comuns de esconder o link:

  • display: none: o elemento não ocupa espaço na página.
  • visibility: hidden: o elemento ocupa espaço, mas fica invisível.
  • Tamanho zero: largura e altura zero, sem texto.
  • opacity: 0: totalmente transparente.
  • Posicionado fora da tela: position: absolute; left: -9999px.
  • Mesma cor do fundo: texto branco sobre fundo branco.
  • Escondido atrás de outro elemento: um link coberto com z-index.

Como alguns desses métodos também podem afetar visitantes que usam leitores de tela, sites cuidadosos adicionam aos links armadilha atributos como aria-hidden="true" e tabindex="-1", para que usuários de teclado e de tecnologias assistivas também não cheguem a eles.

Honeypots em formulários

O honeypot de formulário é a técnica mais comum contra bots de spam. Um campo que as pessoas não conseguem ver é adicionado a um formulário de contato, comentário ou cadastro:

html
<form action="/contact" method="post">
  <input type="text" name="name">
  <input type="email" name="email">
  <!-- As pessoas não veem este campo; se chegar preenchido, o envio é rejeitado -->
  <input type="text" name="website" class="hidden" tabindex="-1" autocomplete="off">
  <button type="submit">Enviar</button>
</form>

Uma pessoa que preenche o formulário não vê o campo website e o deixa vazio. Um bot que preenche automaticamente todos os campos da página escreve um valor ali também. Quando o campo chega preenchido, o servidor rejeita o envio em silêncio ou marca o endereço IP que enviou.

Alguns formulários adicionam também uma verificação de tempo: envios que chegam poucos segundos depois de a página do formulário abrir são tratados como suspeitos, partindo do princípio de que uma pessoa não consegue ler e preencher o formulário nesse tempo.

Para o scraping, a conclusão é clara: um scraper que coleta dados geralmente não tem motivo nenhum para preencher formulários. Um script que envia formulários automaticamente se comporta exatamente como um bot de spam.

Páginas armadilha e labirintos

Um honeypot nem sempre é um único link. Algumas defesas detectam bots e, ao mesmo tempo, desperdiçam os recursos deles puxando-os para páginas infinitas:

  • Caminhos que geram páginas infinitas: páginas de calendário, filtro ou busca que produzem links novos a cada visita. Mesmo sem ser uma armadilha deliberada, elas levam a um loop infinito um crawler sem limite de profundidade.
  • Labirintos de conteúdo gerado: no recurso AI Labyrinth, anunciado pela Cloudflare em 2025, bots que ignoram as diretivas de não rastreamento são enviados a páginas interligadas geradas com IA. Segundo o anúncio, essas páginas também funcionam como um honeypot de nova geração: nenhuma pessoa entra quatro links fundo em um labirinto de conteúdo sem sentido, então um visitante que chega tão longe muito provavelmente é um bot.
  • Dados falsos: em vez dos preços reais, um bot detectado recebe valores alterados, produtos que não existem ou resultados vazios. O scraper não recebe erro, mas os dados coletados deixam de ser confiáveis.

Os dados falsos são a consequência mais perigosa, porque são difíceis de perceber. Um scraper pode rodar por meses e gerar relatórios com preços errados.

O que acontece quando você cai em um honeypot?

O sistema de gerenciamento de bots do site trata uma requisição ao endereço armadilha como um sinal forte. O que vem depois varia conforme o site:

  • O endereço IP é bloqueado: todas as requisições do mesmo endereço passam a receber 403.
  • A sessão é marcada: o cookie ou o token de sessão é rotulado como bot; a sessão é reconhecida mesmo que o IP mude.
  • A impressão digital é registrada: características do navegador ou do cliente são guardadas, e a mesma impressão digital vinda de outros IPs também passa a ser suspeita. Explicamos como as impressões digitais são montadas em Browser fingerprinting.
  • Telas de verificação: páginas de verificação aparecem nas requisições seguintes.
  • Dados falsos ou respostas vazias: o scraper continua rodando, mas coleta dados errados.
  • Listas de reputação compartilhadas: serviços de gerenciamento de bots podem levar em conta, nos sites de outros clientes, as fontes detectadas em um site.

Algumas dessas consequências podem afetar não só o scraper, mas também outros usuários do mesmo endereço IP. É algo a considerar com endereços IP compartilhados.

Por que o seu scraper cai neles?

Honeypots miram um comportamento específico, e esse comportamento geralmente vem de um erro de projeto:

  • Lógica de "seguir todos os links". Colocar na fila todas as tags <a href> da página sem verificar se estão visíveis.
  • Rastreamento sem escopo. Entrar em todos os caminhos do site quando só as páginas de produto são necessárias.
  • Não ler o robots.txt. Endereços armadilha costumam estar fechados no robots.txt; um crawler que segue o arquivo nunca vai até lá.
  • Seguir links rel="nofollow". Links que o site marcou explicitamente para não serem seguidos.
  • Sem limite de profundidade nem de páginas. O crawler não para em caminhos que geram páginas infinitas.
  • Preencher formulários automaticamente. Escrever valores em todos os campos, inclusive nos escondidos.
  • Visitar o mesmo endereço várias vezes com parâmetros diferentes. Milhares de endereços gerados por combinações de filtro e ordenação.

Como um crawler legítimo fica longe dos honeypots?

As regras abaixo não servem para "burlar" honeypots; servem para você não seguir caminhos que o site não quer. Projetar um crawler assim traz como efeito colateral evitar as armadilhas.

  1. Siga o robots.txt. Leia o arquivo do site antes de rastrear e não coloque na fila os caminhos fechados. Explicamos como ler em O que é robots.txt e como ler o arquivo?.
  2. Restrinja o escopo com padrões de URL. Se você só precisa de dados de produto, siga só os endereços que começam com /product/.
  3. Use o sitemap em vez de coletar links, quando possível. O sitemap.xml lista os endereços que o site quer que sejam rastreados.
  4. Siga links visíveis. Se você usa navegador, não coloque na fila links que o usuário não consegue ver.
  5. Pule os links rel="nofollow".
  6. Defina limites de profundidade, de número de páginas e de repetições. Normalize as variações de parâmetros do mesmo caminho.
  7. Não envie formulários para coletar dados. Se enviar um formulário for realmente necessário (por exemplo, fazer login na sua própria conta), preencha só os campos que você conhece.
  8. Limite a sua velocidade. As armadilhas pegam principalmente bots que rastreiam rápido e em largura.

Na automação de navegador, uma verificação de "links visíveis" pode ser assim:

python
from urllib.parse import urljoin, urlsplit

from playwright.sync_api import sync_playwright


def visible_links(page, base, allowed_prefix="/product/"):
    addresses = set()
    for link in page.locator("a[href]").all():
        href = link.get_attribute("href")
        rel = (link.get_attribute("rel") or "").lower()
        if not href or "nofollow" in rel or not link.is_visible():
            continue
        url = urljoin(base, href)
        parts = urlsplit(url)
        if parts.netloc != urlsplit(base).netloc or not parts.path.startswith(allowed_prefix):
            continue
        addresses.add(url)
    return sorted(addresses)


with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://example.com/deals")
    for address in visible_links(page, "https://example.com"):
        print(address)   # antes de colocar na fila, confira também o robots.txt
    browser.close()

Essa função aplica quatro filtros: pula links nofollow, pula links não visíveis, pula links para outros domínios e só pega os que correspondem ao prefixo de endereço permitido.

É preciso conhecer os limites da verificação de visibilidade. O is_visible() do Playwright trata como não visíveis os elementos com display: none, visibility: hidden e tamanho zero. Mas elementos escondidos com métodos como opacity: 0, posicionamento fora da tela ou a mesma cor do fundo podem passar nessa verificação como visíveis. Então a verificação de visibilidade sozinha não é garantia; a proteção real é seguir o robots.txt e limitar o rastreamento aos padrões de URL de que você precisa. Quase todo link armadilha fica fora dessas duas regras.

Um scraper que trabalha com um cliente HTTP, sem navegador, não consegue medir a visibilidade diretamente; para ele, os padrões de URL, o robots.txt e as regras do sitemap importam ainda mais.

Tipos de honeypot

TipoComo funcionaQuem ele pega?Como um crawler legítimo fica longe?
Link escondido com CSSUm link que as pessoas não veem, muitas vezes fechado no robots.txtBots que seguem todos os linksrobots.txt, padrões de URL, verificação de visibilidade
Campo de formulário escondidoRejeitado se um campo que deve ficar vazio chegar preenchidoBots de formulário que preenchem todos os camposNão enviar formulários ao coletar dados
Verificação de tempoFormulários enviados rápido demais são tratados como suspeitosBots que enviam na horaNão enviar formulários
Caminho de páginas infinitasPáginas que geram links novos a cada visitaCrawlers sem limite de profundidadeLimites de profundidade e de páginas, normalização de parâmetros
Labirinto de conteúdo geradoPáginas geradas para bots que ignoram diretivas de não rastreamentoBots que não seguem o robots.txtSeguir o robots.txt
Dados falsosConteúdo alterado para bots detectadosIPs ou sessões marcadosNão ser marcado; conferir os dados por amostragem

Casos de uso

  • Um crawler em grande escala: um cache de robots.txt por site, uma lista de padrões de URL permitidos, um limite de profundidade e descoberta começando pelo sitemap. O lado da escala está na nossa página de solução de web crawler.
  • Rastreamento para proteção de marca: rastreamentos para detectar sites que vendem produtos falsificados mantêm o escopo limitado às páginas de produto relevantes; agir dentro das regras é essencial para reunir provas sem acionar as defesas do site rastreado. A configuração está na nossa página de solução de proteção de marca.
  • Detecção de bots como dono de site: um honeypot de formulário no seu próprio site e um link armadilha fechado no robots.txt são formas baratas de detectar cedo automação maliciosa. O lado da proteção de dados está na nossa página de solução de segurança de dados.
  • Verificações de qualidade de dados: conferir regularmente à mão, em um navegador, uma amostra dos preços coletados mostra se dados falsos estão sendo servidos.

Erros comuns

  • Tratar o honeypot como um obstáculo técnico a ser burlado. A armadilha é sinal de uma preferência explícita do site; o problema real é o rastreamento sem escopo.
  • Confiar só na verificação de visibilidade. Elementos transparentes ou fora da tela podem passar nela.
  • Ler o robots.txt uma única vez no início. Em rastreamentos longos, o arquivo pode mudar; atualize-o por site de tempos em tempos.
  • Não contar com dados falsos. Não receber erros não significa receber dados corretos.
  • Enviar formulários "por garantia". A coleta de dados quase nunca precisa de envio de formulário.
  • Contar variações de parâmetros como endereços diferentes. Páginas de filtro com combinações infinitas puxam o crawler para uma armadilha.

Reunimos os outros erros de velocidade, cabeçalhos e IP em Como fazer web scraping sem ser bloqueado.

Guia de decisão

Sua situaçãoRecomendação
Só certos tipos de página são necessáriosLista de padrões de URL permitidos, sitemap
Você rastreia em largurarobots.txt, limite de profundidade, normalização de parâmetros
Você usa automação de navegadorLinks visíveis e sem nofollow + robots.txt
Você usa um cliente HTTPPadrões de URL e robots.txt (a visibilidade não pode ser medida)
Um formulário precisa ser preenchidoSó os campos conhecidos; não envie formulários para coletar dados
Você duvida da precisão dos dadosPegue uma amostra e confira à mão no navegador
Você quer proteger o seu próprio siteHoneypot de formulário + link armadilha fechado no robots.txt

Perguntas frequentes

Em geral, sim; um site adicionar à própria página um link ou campo que os visitantes não conseguem ver é uma técnica de defesa. Mas o conteúdo armadilha não deve ser enganoso nem prejudicar a acessibilidade, e os dados pessoais coletados no processo estão sujeitos às leis correspondentes.

Como o meu scraper sabe que caiu em um honeypot?

Ele não sabe diretamente; o endereço armadilha pode responder como uma página normal. Os sinais são indiretos: respostas 403 que começam logo depois, telas de verificação, dados que mudam de repente ou ficam incoerentes. Procure nos registros do rastreamento requisições enviadas a endereços fechados no robots.txt ou que você não esperava.

Trocar de IP tira um bloqueio depois de um honeypot?

Pode ajudar temporariamente quando o bloqueio está ligado só ao IP, mas não muda o comportamento de rastreamento que causou o problema. Não ajuda em nada quando a marcação se baseia na sessão ou na impressão digital. A solução certa é corrigir o escopo do crawler e o cumprimento das regras.

Por que os bots dos buscadores não caem em honeypots?

Os bots legítimos dos buscadores seguem o robots.txt e respeitam sinais como nofollow. Os donos de sites costumam fechar os endereços armadilha no robots.txt, então esses bots nunca vão até lá. A mesma lógica vale para todo crawler que segue as regras.

Qual é a diferença entre honeypot e CAPTCHA?

O CAPTCHA pede explicitamente uma verificação ao visitante e afeta também os usuários humanos. O honeypot é invisível; os usuários humanos não percebem nada, e só quem mostra um comportamento automatizado específico cai na armadilha.

Devo adicionar um honeypot ao meu próprio site?

A técnica do campo escondido em formulários de contato e comentários é uma forma barata de reduzir spam e não afeta a experiência do usuário. Ao adicionar links armadilha escondidos, não se esqueça de fechar o endereço armadilha no robots.txt; senão, você pode marcar por engano bots de buscadores que seguem as regras.

Em resumo

Um honeypot é uma armadilha construída de forma que visitantes humanos não a vejam, mas na qual caem os bots que processam automaticamente cada link e cada campo de formulário: links escondidos com CSS, campos de formulário que devem ficar vazios, páginas infinitas e labirintos de conteúdo gerado. Um scraper que cai na armadilha é bloqueado, esbarra em telas de verificação ou coleta dados falsos sem perceber. A forma de se proteger de honeypots não é tentar burlá-los, e sim projetar um crawler que siga o robots.txt, só siga os padrões de URL de que precisa, tenha limites de profundidade e não envie formulários. Para trabalhos de coleta de dados dentro das regras, conheça os nossos serviços de proxy.