Formulários de contato WordPress: uma lista de segurança
Contact Form 7, WPForms, Gravity Forms, Ninja Forms ou Fluent Forms — o plugin importa menos que sua configuração e manutenção. Veja o que conferir e rever após cada atualização.
A maioria dos sites WordPress usa um pequeno grupo de plugins de formulário: Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms e alguns outros. Qualquer um pode funcionar com segurança ou ficar totalmente aberto. A diferença raramente está no próprio plugin, mas nas configurações, nos complementos, em como os e-mails saem do servidor e no que acontece com as mensagens quando chegam.
- Mantenha o plugin de formulário e todos os complementos atualizados e exclua os que não usa mais.
- Ative o antispam do próprio plugin — honeypot, integração de CAPTCHA, Akismet quando adequado — e confirme que realmente funciona.
- Envie notificações por SMTP autenticado a partir de um endereço do seu próprio domínio.
- Restrinja uploads por tipo e tamanho e impeça a listagem ou navegação pública dos arquivos enviados.
- Mantenha o endereço de e-mail do destinatário fora da página e de seu código-fonte.
- Armazene apenas as entradas necessárias e somente pelo tempo necessário.
- Faça uma verificação rápida após cada atualização do WordPress, do tema ou de qualquer plugin.
Atualizações: o plugin de formulário e tudo ao redor
Plugins de formulário são alvos populares porque aceitam entradas de qualquer pessoa na internet. Correções de segurança chegam como atualizações comuns, então atualize rapidamente — e não apenas o plugin principal. Complementos de pagamento, upload, integração com CRM, lógica condicional ou provedores extras de CAPTCHA são códigos separados com vulnerabilidades próprias. O mesmo vale para plugins instalados uma vez para teste e esquecidos. Desativar não basta: plugins desativados continuam no servidor, e seus arquivos podem, em alguns casos, ser acessados diretamente. Se não usa, exclua.
Antispam: ative e depois comprove que funciona
A maioria dos plugins tem opções próprias de antispam ou integra serviços externos: campo honeypot que bots preenchem e pessoas nunca veem, CAPTCHAs como reCAPTCHA, hCaptcha ou Cloudflare Turnstile e Akismet, que compara o conteúdo das mensagens com um banco de spam. As opções variam conforme plugin e versão, então confira as configurações em vez de presumir. CAPTCHAs externos carregam scripts de terceiros, e Akismet envia o conteúdo recebido a um serviço externo — ambos devem constar na política de privacidade e, dependendo da configuração, no gerenciamento de consentimento.
O problema mais comum é uma proteção ativada, mas que não funciona. Um CAPTCHA com chaves públicas de teste deixa tudo passar. Um widget cujo script é bloqueado por plugin de cache ou otimização ou por erro de JavaScript não impede nada. Um campo honeypot sem os estilos que o ocultam é anunciado por leitores de tela e preenchido por visitantes reais. Portanto, após qualquer alteração, abra o formulário em uma janela privativa, confira o console e o código-fonte e envie uma mensagem de teste. Se quiser proteção independente do Google, o plugin gratuito formexposed para WordPress adiciona honeypot, verificação de tempo e prova de trabalho e verifica novamente o site após atualizações de plugins — uma opção entre várias.
E-mail: como é enviado e para onde vai
Por padrão, WordPress entrega os e-mails à função de e-mail do PHP do servidor e, em muitas hospedagens, essas mensagens são mal autenticadas e acabam no spam — ou desaparecem silenciosamente. Em vez disso, envie por um plugin SMTP ou pelo serviço de e-mail da hospedagem, usando uma caixa real com usuário e senha e um remetente do seu próprio domínio, como um endereço dedicado forms@. Os registros SPF, DKIM e DMARC do domínio devem abranger esse remetente. Não coloque o endereço do visitante no campo From: não é seu domínio, então a mensagem não consegue passar no alinhamento DMARC e, conforme a política do domínio do visitante, cai no spam ou é rejeitada. Defina-o como Reply-To e você ainda poderá responder com um clique.
O endereço do destinatário deve estar nas configurações do plugin, não na página. Confira o código-fonte da página de contato: um link mailto ao lado do formulário ou um campo oculto com o destinatário entrega esse endereço a todo bot coletor. Em formulários antigos ou personalizados, pode ser pior — se o servidor confiar em um campo oculto de destinatário, qualquer pessoa poderá alterá-lo e usar seu formulário para enviar e-mails a endereços arbitrários.
Uploads e entradas armazenadas
Uploads de arquivos são o recurso mais arriscado de um formulário, então primeiro pergunte se realmente precisa deles. Se precisar, permita apenas os tipos efetivamente esperados — como PDF e formatos comuns de imagem — em vez de bloquear alguns perigosos, e defina um limite de tamanho. Confira onde o plugin armazena os arquivos: eles não podem ser listados em um diretório público e, idealmente, nem acessados por um endereço adivinhável. Exclua-os após tratar o assunto ou envie-os como anexos em vez de mantê-los no servidor.
Muitos plugins ou complementos salvam cada envio no banco de dados WordPress, frequentemente incluindo spam. É uma reserva útil quando o e-mail falha, mas também uma pilha crescente de dados pessoais. Pelo princípio da limitação da conservação do RGPD (Art. 5(1)(e)), esses dados não devem ser mantidos além do necessário. Decida se precisa das entradas armazenadas, quais campos e por quanto tempo; depois use a exclusão automática do plugin, se houver, ou exclua registros antigos regularmente. Backups do banco contêm os mesmos dados.
Após cada atualização
- 1Abra a página de contato em uma janela privativa: o formulário e seu elemento antispam são exibidos corretamente, e o console do navegador não mostra erros.
- 2Veja o código-fonte: o campo honeypot e o script de CAPTCHA continuam lá, e o endereço do destinatário não.
- 3Envie uma mensagem de teste: ela chega à caixa de entrada, não ao spam, e os cabeçalhos mostram aprovação em SPF, DKIM e DMARC.
- 4Confira as configurações importantes: destinatário, endereço remetente, tipos e tamanhos de upload permitidos, prazo de conservação das entradas.
- 5Confira se o link da política de privacidade e os textos de consentimento continuam aparecendo no formulário.
- 6Anote a data e o que verificou para saber quando o formulário funcionou pela última vez de forma comprovada.
Quando vira rotina, isso leva pouco tempo e detecta justamente as falhas silenciosas que passariam despercebidas por semanas. Para uma visão externa, uma verificação gratuita em formexposed.com examina as páginas públicas de formulário sem enviar nada e mostra se a proteção esperada está presente e configurada de forma eficaz — sem precisar de conta.