Voltar ao Diário
SegurançaNº 00907 de julho de 20266 min

O ataque que ninguém vê chega pelo formulário de contato do seu site

O formulário de contato parece inofensivo. É a porta mais aberta que você tem, e quase ninguém a tranca.

Todo mundo protege o login. Ninguém olha para o formulário de contato. E mesmo assim ele aceita entrada de qualquer pessoa, sem autenticação, sem fricção, muitas vezes sem nem um limite de envios.

É essa a assimetria que o atacante procura. Uma caixa de texto que conversa com o seu servidor de email, com o seu banco de dados, ou com um webhook interno. Você vê um campo "mensagem". Ele vê uma linha de comando.

Por que esse alvo é tão apetitoso

Um formulário de contato junta três propriedades raras no mesmo lugar. Aceita entrada não confiável. Roda lógica no servidor. E quase nunca é auditado. O programador testou que a mensagem chega no email. Parou aí.

O problema é que "a mensagem chega no email" esconde um caminho inteiro. O texto do usuário é montado dentro de um cabeçalho SMTP, concatenado numa query, ou enviado para um serviço terceiro. Cada uma dessas fronteiras é uma oportunidade de injeção.

Injeção de cabeçalhos de email

O caso clássico se chama email header injection. Se você pega o campo "assunto" ou "remetente" e cola direto no cabeçalho da mensagem, um atacante escreve uma quebra de linha e adiciona os próprios cabeçalhos. Um Bcc para mil endereços, por exemplo.

De repente o seu servidor está enviando spam. Não em seu nome por acaso, mas literalmente pela sua infraestrutura, com o seu IP e o seu domínio. O resultado é previsível: os grandes provedores marcam o seu domínio como fonte de spam e o seu email de negócio deixa de chegar em qualquer lugar.

O texto que vira código

Depois vêm os cenários piores. Se você guarda a mensagem num banco de dados sem parametrizar a query, abre a porta pra SQL injection. Se mostra a mensagem num painel de admin sem escapar o HTML, o atacante planta um script que roda no navegador da sua equipe quando ela abre o lead. Isso é XSS armazenado, e é um dos vetores mais subestimados que existem.

Repare no padrão. Em nenhum desses casos o atacante "invadiu" nada. Usou o formulário exatamente como ele foi desenhado para ser usado. A vulnerabilidade não é uma falha exótica. É a ausência de uma regra simples: nunca confie no que entra.

O que fazer, por ordem de prioridade

Você não precisa de um WAF nem de um consultor de segurança para fechar 90% disso. Precisa de disciplina em quatro pontos.

  • Valide no servidor, nunca só no navegador. A validação de front-end é conforto para o usuário, não é segurança. O atacante não usa o seu formulário, faz POST direto no endpoint.
  • Escape na saída, sempre. Ao gravar no banco use queries parametrizadas. Ao mostrar num painel escape o HTML. Trate cada mensagem como hostil até prova em contrário.
  • Rejeite quebras de linha em campos de cabeçalho. Assunto, nome e email não têm motivo para conter \r ou \n. Filtre isso antes de tocar no SMTP.
  • Limite a taxa de envios e adicione um desafio invisível. Rate limiting por IP e um honeypot ou hCaptcha param bots automáticos sem estragar a experiência de quem é humano.

E o lado que quase todo mundo esquece

Um formulário de contato coleta dados pessoais. Nome, email, muitas vezes telefone e o conteúdo da mensagem. Isso te coloca dentro da LGPD, quer você goste ou não. Você precisa de uma base legal para tratar aqueles dados, e o consentimento tem de ser informado.

Na prática isso significa três coisas concretas. Um aviso claro de privacidade ligado ao formulário. Uma base legal definida, tipicamente o legítimo interesse do artigo 7.º ou o consentimento explícito. E uma política de retenção, porque guardar leads para sempre não é uma estratégia, é uma responsabilidade acumulada. Se roubarem o seu banco de leads, o problema deixa de ser técnico e passa a ser regulatório.

Segurança de formulário não é um firewall caro. É se recusar a confiar no texto que um estranho escreveu.Krivar Diário

A moral é chata e por isso funciona. O ataque que ninguém vê chega pela porta que ninguém olha. Trate o seu formulário de contato com o mesmo respeito que você dá ao login e a maioria desses problemas nunca chega a acontecer.

Referências
  1. 01OWASP — Injection
  2. 02OWASP — Cross Site Scripting (XSS)
  3. 03MDN — Validação de entrada
  4. 04LGPD — Lei nº 13.709/2018
  5. 05OWASP Cheat Sheet — SQL Injection Prevention
Também:
SegurançaNº 004

Como um certificado SSL vencido tirou sua loja do Google em 48 horas

Um certificado vence numa quarta-feira às 03:14. Na sexta de manhã o tráfego orgânico despencou. Não foi azar — foi negligência mensurável.

SegurançaNº 002

HTTPS não é mais feature. É baseline.

Em 2026, qualquer site sem certificado SSL está dizendo ao visitante para ir embora — e o navegador faz questão de sublinhar.

Voltar ao Diário