Como proteger formulários contra spam e bots sem atrapalhar clientes

Honeypot, tempo mínimo, limite por IP, validação no servidor e captcha: as camadas que bloqueiam spam em formulários sem afastar quem quer falar com você.

A melhor defesa contra spam em formulário é em camadas invisíveis para quem é pessoa: um campo isca, um tempo mínimo de preenchimento, limite de envios por IP e validação no servidor. O captcha fica por último, porque é o que mais atrapalha quem quer realmente falar com você.

Por que o spam chega

Robôs varrem a internet atrás de formulários abertos. Os objetivos variam: divulgar links, testar se o endereço aceita qualquer coisa, tentar usar o seu servidor de e-mail para enviar mensagens. Um formulário sem proteção pode encher a caixa de entrada e ainda prejudicar a reputação do seu domínio.

As camadas, da mais leve à mais pesada

1. Campo isca (honeypot)

Um campo escondido por CSS que pessoas nunca veem nem preenchem, mas muitos robôs preenchem. Se vier preenchido, o envio é descartado. Custa nada para o visitante.

2. Tempo mínimo de preenchimento

Quem leva menos de alguns segundos para preencher um formulário provavelmente não é uma pessoa. O formulário gera um token quando a página carrega e só aceita o envio depois de um intervalo curto. No formulário de contato do nosso site, por exemplo, o envio só é aceito depois de poucos segundos.

3. Limite por IP e por intervalo

Permita um número pequeno de envios por endereço em uma janela de tempo. Isso reduz tentativas em massa e protege o servidor de e-mail.

4. Validação no servidor

Validar só no navegador não basta: um robô fala direto com o servidor e ignora o JavaScript. O servidor deve conferir tipos, tamanhos, formatos e rejeitar conteúdo suspeito, como excesso de links ou quebras de linha em campos de uma linha só (usadas para injetar cabeçalhos de e-mail).

5. Filtro de conteúdo

Regras simples já ajudam: limite de links por mensagem, lista de palavras e domínios conhecidos de spam, tamanho mínimo e máximo.

6. Captcha

Quando as camadas anteriores não bastam, serviços como Cloudflare Turnstile, hCaptcha e reCAPTCHA verificam se o visitante é uma pessoa. Considere:

  • Experiência: alguns pedem cliques; outros trabalham em segundo plano.
  • Privacidade: envolvem um terceiro. Se usar, descreva na política de privacidade.
  • Acessibilidade: desafios visuais podem excluir pessoas; prefira opções com alternativa.

Erros comuns

  • Contar só com o captcha e esquecer da validação no servidor.
  • Mostrar a mensagem de erro técnica ao robô e ao cliente. Use textos genéricos.
  • Bloquear o envio sem avisar. Se for um falso positivo, a pessoa precisa saber como tentar de novo ou falar por outro canal.
  • Colocar o e-mail do visitante no campo "de". Use "responder para". Isso evita problemas de entrega: veja Formulário de contato no WordPress.

Testes que valem a pena

  1. Envie o formulário em menos de um segundo, com uma ferramenta de requisição direta. Deve ser rejeitado.
  2. Preencha o campo isca. Deve ser descartado.
  3. Envie dez vezes seguidas. O limite deve atuar.
  4. Cole uma mensagem cheia de links. Deve ser barrada ou sinalizada.
  5. Faça um envio normal, como uma pessoa. Deve passar sem fricção.

Registre sem expor

Guarde o que foi bloqueado e por quê, para ajustar as regras, sem guardar dados pessoais além do necessário. Se as mensagens bloqueadas contiverem dados de pessoas, a LGPD também se aplica: LGPD em formulários.

E se o spam já passou?

Quando o spam passa, o dano costuma ser maior do que parece: aviso demais, equipe ignorando mensagens reais, reputação do e-mail. Trate o problema como parte do projeto do formulário, não como detalhe. O checklist de formulário lista o que revisar antes de publicar.

Seu formulário está recebendo lixo? Escreva para hello@krivo.works com o endereço da página e o que está chegando; a gente olha o que dá para melhorar.

#spam#segurança#formulários#anti-bot

← Todos os artigos