Um honeypot em formulários web é um campo de entrada invisível, escondido aos utilizadores humanos via CSS mas visível para bots automatizados que analisam o HTML. Como utilizadores reais nunca veem (nem preenchem) o campo, qualquer submissão com honeypot preenchido é rejeitada como spam. A técnica popularizou-se por volta de 2007 com blogs antispam e o plugin WordPress "Honeypot for Contact Form 7", sendo a alternativa amigável à privacidade aos CAPTCHAs como o Google reCAPTCHA — sem scripts de terceiros, sem cookies, sem problemas de acessibilidade, sem perda de conversão.
Como funciona um honeypot?
O servidor adiciona um campo extra (frequentemente website, url, email_confirm). É escondido via display: none, visibility: hidden, position: absolute; left: -9999px, <label> vazio ou tabindex="-1" autocomplete="off". Bots preenchem todos os campos que encontram — incluindo a armadilha. No envio o servidor verifica:
- Campo vazio → humano, processar.
- Campo preenchido → bot, descartar em silêncio ou devolver 200 OK sem guardar.
Honeypot vs CAPTCHA: qual é melhor?
| Critério | Honeypot | CAPTCHA (reCAPTCHA) |
|---|---|---|
| Fricção para o utilizador | Nenhuma | Média–alta |
| Acessibilidade (WCAG 2.2) | Conforme | Necessita áudio |
| Privacidade / RGPD | Sem chamadas a terceiros | Scripts Google, requer consentimento |
| Performance | ~0 KB | ~200 KB JS |
| Deteção de bots | ~95 % spam básico | ~99 % incluindo bots avançados |
| Impacto na conversão | Nenhum | 3–29 % de queda |
Para a maioria dos sites WordPress, honeypot + verificação de tempo bloqueia spam suficiente — sem o custo legal e de UX de um CAPTCHA.
Como adicionar um honeypot a um formulário WordPress?
Contact Form 7
Instala o plugin grátis "Honeypot for Contact Form 7" (mais de 1 milhão de instalações ativas) e adiciona o tag [honeypot website].
WPForms / Gravity Forms / Fluent Forms
Os três têm opção de honeypot embutida — ativa com um clique.
Formulário WordPress próprio
<p style="position:absolute;left:-9999px;" aria-hidden="true">
<label for="website">Deixe este campo vazio</label>
<input type="text" name="website" id="website" tabindex="-1" autocomplete="off">
</p>if ( ! empty( $_POST['website'] ) ) {
wp_die( 'Spam detetado', 'Erro', array( 'response' => 200 ) );
}Boas práticas para honeypots
- Nomes plausíveis como
website,url,company. - Esconder via CSS, não
type="hidden". tabindex="-1"+autocomplete="off".aria-hidden="true"para leitores de ecrã.- Combinar com verificação de tempo — rejeitar sob 2–3 s.
- Devolver 200 OK para não revelar a armadilha.
Quando o honeypot não chega?
Bots avançados que executam JS e respeitam visibilidade CSS (Puppeteer / headless Chrome) saltam o honeypot. Para alvos de alto valor (login, pagamento, lead-gen com prémio) combina honeypot + tempo + Cloudflare Turnstile ou rate limiting. O outro significado de "honeypot" — um servidor deliberadamente vulnerável para estudar atacantes — é um conceito de cibersegurança distinto.
O que o InspectWP verifica
O InspectWP analisa cada formulário na página rastreada e sinaliza ausência de proteção antispam em formulários de contacto e login. Também deteta scripts Google reCAPTCHA na secção RGPD.