Como acabar com o spam no WordPress

  • Publicado em: 30/01/2013
  • Revisado em: 19/09/2013
  • Categoria(s)Wordpress
  • Autor: Ricardo Bernardi
  • Newsletter: Inscreva-se

Quem tem um blog com a plataforma WordPress sabe como é difícil fugir dos spammers que insistem em postar centenas de comentários publicitários e indesejados todos os dias. Aqui no RBTech não é diferente, o problema é que isso já estava ficando inaceitável, pois diariamente eu estava recebendo em média 300 spams.

Apesar de usar o plugin AntiSpam Bee que marca 99% dos spams os move para a pasta adequada, sempre precisa ficar conferindo se não houve algum falso positivo e em seguida excluir o lixo restante.

Procurei durante vários anos uma solução capaz de bloquear os spammers de forma eficiente e sem precisar ficar instalando plugins pesados e muitas vezes não confiáveis no blog. Testei dicas para o arquivo .htaccess, usei o recurso wp_nonce_field para gerar chaves de validação no form de comentários e muitas outras dicas encontradas em sites do mundo todo.

Resolvi então que era hora de estudar como funciona um bot spammer, entender os passos deles para poder me defender de forma eficaz. Pois bem, depois de muito pesquisar e estudar temos um veredito.

Como funciona um robô spammer

A grande maioria (isso não é regra) dos robôs responsáveis por publicar spam nos blogs funciona da seguinte forma:

  1. Fazem uma varredura na internet (semelhante aos motores de busca) procurando páginas que contém um formulário para postar conteúdo.
  2. Ao encontrar essas páginas, fazem um índice que será usado para envio de spam.
  3. Depois usam este índice, acessam cada página do mesmo e preenchem de forma automatizada todos os campos do formulário.
  4. Em seguida forçam a página a receber o $_POST dos campos todos preenchidos como se fosse um humando que enviou os dados.
  5. E ficam repetindo esse processo infinitas vezes para cada página do seu índice.

Como enganar os robôs spammers

Como citado acima, um robô não consegue identificar quais campos do formulário são realmente requeridos para a postagem do conteúdo, assim sendo eles sempre irão preencher todos os campos antes do envio.

Usando essa lógica fazemos o seguinte:

  1. Criamos um input extra em nosso formulário com um nome qualquer.
  2. Ocultamos esse input utilizando CSS (display:none).
  3. Quando recebermos o $_POST do formulário verificamos se este campo oculto está preenchido, se estiver é porque o form foi enviado por um robô.
  4. Interceptamos a postagem do comentário "matando" a execução do script.

Tudo que você precisa fazer é adicionar o seguinte código ao arquivo functions.php do seu tema:

function add_comment_extra_field(){
    echo '<input type="text" style="display:none;" name="username" />';
}
add_action('comment_form', 'add_comment_extra_field');

function check_comment_extra_field(){
    if (trim($_POST['username'])!='') die('Desculpe, mas suspeitamos que seu comentario seja spam!');
}
add_action('pre_comment_on_post', 'check_comment_extra_field');

Agora é só esperar alguns dias e conferir o resultado. Aqui no RBTech reduziu a praticamente ZERO o número de spam após a implementação das funções.

Compartilhe esse post:

Sobre o autor

Ricardo Bernardi

Sou técnico em hardware e desenvolvedor web, e sobre estes dois assuntos comecei a compartilhar aulas e artigos, tornando-me blogueiro em 2008. Em 2010 esse hobby virou profissão, e desde então tenho buscado melhorar e profissionalizar cada vez mais os projetos que mantenho na web.

Comentários

Atualmente temos 8 comentários para este post. Participe você também, clique aqui e comente sobre o assunto.

  • André Ventura comentou em

    Bom dia Ricardo,

    não tenho muito conhecimento em WordPress. Na verdade trabalho mais com Joomla. Uma amiga pediu para eu verificar como resolver essa questão de spam que está aparecendo nos comentários do blog dela e desenvolvido em WordPresss. A pergunta é: onde exatamente coloco o script disponibilizado no arquivos function.php?
    Obrigado
    Att.,
    André ventura

    Responder
  • Ótimo artigo, estava recebendo por volta de 200 spams por dia, e agora aparentemente parou.

    Só mudei um item no código, a função add_comment_extra_field não inseriu o campo username no formulário, então removi essa função do functions e adicionei o campo diretament no arquivo comments.php do meu tema.

    Abraço e obrigado
    Fernando

    Responder
  • rafael1 comentou em

    Realmente isso é interessante, mas tenho dúvidas se isso fere principalmente a acessibilidade e de maneira menos importante quem quer validar o código.

    Responder
  • Caio comentou em

    Amigo,

    Onde no arquivo functions.php devo inserir o codigo?
    aqui tenho um arquivo functions.php dentro de theme e outro dentro de theme/includes/

    obrigado

    Responder

Deixe seu comentário