Que problema tem?
Três casos parecem semelhantes, mas têm causas diferentes:
- Chega spam. A sua caixa de entrada enche-se de publicidade, links ou texto sem sentido. O formulário deixa passar bots.
- O formulário indica um erro. Os visitantes veem «There was an error trying to send your message. Please try again later.» (traduzido em sites noutras línguas). Pode ser a proteção antispam ou um problema no envio de e-mail.
- Faltam pedidos genuínos. Ninguém se queixa, mas também não chega nada. Nesse caso, a proteção pode estar a rejeitar pessoas, ou os e-mails não chegam à sua caixa de entrada.
Identifique primeiro o caso, antes de adicionar proteção. Como fazê-lo está descrito na secção «Envio de e-mail ou proteção contra bots?».
O que o Contact Form 7 já traz
O Contact Form 7 tem várias medidas contra spam integradas (verificado na versão 6.1.7):
- Lista de bloqueio. O CF7 verifica cada envio com a lista em «Definições → Discussão» («Disallowed Comment Keys»). Uma correspondência conta como spam. Isto ajuda contra palavras e domínios recorrentes, não contra textos novos.
- Campo de quiz. Com a etiqueta
[quiz], o formulário faz uma pergunta definida por si. Os bots que preenchem qualquer formulário falham; os bots que visam especificamente o seu site não. - Akismet. Com o plugin Akismet e uma chave Akismet, o CF7 verifica nome, endereço de e-mail e texto através do serviço Akismet.
- reCAPTCHA v3. O CF7 carrega o script da Google e rejeita envios abaixo de um limiar de pontuação.
- Cloudflare Turnstile. O CF7 integra o Turnstile; o script vem da Cloudflare.
A lista de bloqueio e o quiz funcionam sem serviço externo. O Akismet, o reCAPTCHA e o Turnstile enviam os dados dos seus visitantes ao respetivo fornecedor, e isso tem de constar da sua política de privacidade.
Quando faz sentido uma proteção adicional contra bots
Uma proteção dedicada contra bots compensa se
- o spam continua a chegar apesar da lista de bloqueio e do quiz,
- não quer carregar scripts da Google ou da Cloudflare,
- quer ver, para cada envio rejeitado, porque foi rejeitado.
Se o quiz chega para o seu formulário, não precisa de mais nada. Uma proteção de que ninguém precisa é apenas mais uma fonte de erros.
Configurar o SilentShield para o Contact Form 7
O plugin oficial «SilentShield – Captcha & Anti-Spam» protege o Contact Form 7 sem código próprio. Testámo-lo com o Contact Form 7 6.1.7 e o WordPress 7.0.
- Instale e ative o plugin a partir do diretório do WordPress.
- Em «SilentShield → API / SilentShield», introduza a sua chave, clique em «Validate», ative «Activate API» e guarde.
- Em «SilentShield → Forms», ative o Contact Form 7.
O site tem de funcionar com https; caso contrário, o formulário não pode ser enviado. Todos os passos e os plugins de formulários testados estão no guia do WordPress. Cada envio conta para a quota, consulte preços e quotas.
Testar envios genuínos e tentativas falhadas
Um envio genuíno: Abra a página numa janela privada, preencha o formulário à mão e envie-o. Deverá ver a confirmação do CF7 com um contorno verde.
Uma tentativa falhada: Envie o mesmo formulário sem navegador para a interface do CF7. Encontra o ID do formulário e o valor de _wpcf7_unit_tag no código-fonte da página, nos campos ocultos do formulário.
curl -X POST "https://example.com/?rest_route=/contact-form-7/v1/contact-forms/123/feedback" \
-F "_wpcf7=123" -F "_wpcf7_unit_tag=wpcf7-f123-p45-o1" -F "_wpcf7_container_post=45" \
-F "your-name=Test" -F "[email protected]" -F "your-message=Test"
Deverá receber uma resposta com "status":"spam". Com o SilentShield, a mensagem diz «Behavior check».
Envio de e-mail ou proteção contra bots?
mail_sentspammail_failedvalidation_failedNo Contact Form 7, «spam» e «não foi possível enviar o e-mail» têm o mesmo texto predefinido. Pode distingui-los em dois sítios:
- Cor do contorno da mensagem: laranja significa spam, vermelho significa que o envio do e-mail falhou, desde que o seu tema não substitua as cores do CF7.
- Resposta no navegador: Nas ferramentas de programador (separador Rede), a resposta a
feedbackcontém ostatus:spamoumail_failed.
Se for mail_failed, a proteção contra bots deixou passar o envio; o problema está no envio de e-mail pelo WordPress. Verifique então as definições de e-mail, por exemplo com um plugin SMTP. Se for spam, foi uma medida de proteção que o rejeitou. Com o SilentShield, a mensagem indica o motivo, como «Behavior check».
Limites
- Nenhuma proteção trava o spam que uma pessoa escreve à mão.
- Sem JavaScript no navegador, um envio para um formulário protegido é rejeitado.
- O SilentShield protege formulários contra bots. Não substitui uma firewall de aplicações web nem uma proteção contra DDoS.