Adicionem o novo domínio do blog aos seus favoritos! www.crashcomputer.com.br

   terça-feira, 11 de dezembro de 2012

O Jefferson fez este post com um script (que ele encontrou) que ajuda a matar uma boa parte do SPAM no WordPress.

Porem como o próprio Jefferson notou, ele tem uma falha que confunde palavras, como o bem citado exemplo dele, onde “especialista” é confundido com “cialis”.

Nisso resolvi dar uma ajeitada no script de forma que ele não confunda mais as palavras, fazendo o uso de expressões regulares para “pescar” somente as frases (ou blocos) exatos dentro do texto do comentário.

O novo código ficou assim:

//Acrescente isso no final de functions.php (é um arquivo do tema, não do wordpress)
//pode ser imediatamente antes da linha final com um "?>".

function in_comment_post_like($string, $array) {
      foreach ( $array as $key => $value ) {
          if (preg_match("/\b".$value."\b/i", $string)) { return true; }
      }
      return false;
}

function drop_bad_comments() {
    if (!empty($_POST['comment'])) {
        $post_comment_content = $_POST['comment'];
        $lower_case_comment = strtolower($_POST['comment']);

        // Lista de palavras banidas.
        // Comentários com essas palavras serão automaticamente deletados
        // e quem postou, se não for um bot, verá um alerta.
        // Mas caso seja um bot, receberá o erro http 503.

        // Coloque somente palavras na lista, não coloque símbolos como: [ { ( *

        $bad_comment_content = array(
            'viagra',
            'hydrocodone',
            'xanax',
            'tramadol',
            'lorazepam',
            'adderall',
            'dexadrine',
            'no prescription',
            'oxycontin',
            'without a prescription',
            'sex pics',
            'family incest',
            'online casinos',
            'online dating',
            'cialis',
            'amoxicillin',
            'ecadastro.com.br',
            'seomaster.com',
            'divulgaemail.com',
            'listadeemails.com',
            'casaemail.com.br',
            'acertemail.com',
            'maladiretasegmentada.com.br',
            'busquemail.com.br',
            'boliche.com.br',
            'kitsucesso.com',
            'emailsvip.com.br',
            'kitdeemail.com',
            'rocket attacks',
            'blue spoon'
        );

        if (in_comment_post_like($lower_case_comment, $bad_comment_content)) {
            wp_die( __('<b>Seu comentário contém palavras ou expressões banidas.</b><br><br><i>'.$post_comment_content.'</i>'),('Erro'),array( 'response' => 503, 'back_link' => true ) );
        }
    }
}

add_action('init', 'drop_bad_comments');

Isto deve ser adicionado dentro do arquivo functions.php do seu tema. Com isso, a lista de palavras presentes no array será verificada uma a uma com o conteúdo do comentário e caso uma delas esteja presente, o comentário é automaticamente bloqueado e não é postado. }:D

De quebra, adicionei para o script já enviar um header http com erro para os robots, já dando um legitimo chute na bunda deles, se e quando é claro, eles lerem o header http. :-o*

Tenho planos de transformar esse script em um plugin, que poderá ser instalado facilmente no WordPress, e o banco de palavras ficará armazenado no mysql, e com isso não será mais necessário editar diretamente o código para inserir novas palavras, isso será feito diretamente pela pagina de configuração do plugin.

Edit: Existe um pequeno conflito com a mensagem de alerta quando usado o plugin AEC (Ajax Edit Comments) e a função wp_die. Quando é postado o primeiro comentário e existir uma palavra proibida, a mensagem é exibida corretamente. Porem quando for o segundo comentário ou posteriores, a mensagem será exibida em um popup do tipo alert (javascript) e neste caso a formatação do texto será perdida, melhor dizendo, será impressa na mensagem as tags html.

Por mim esta de bom tamanho, posso conviver com isso, visto que essa mensagem de erro só deverá se vista por spammer mesmo.

E estou tentado a desligar o reCaptcha, só pra ver o que acontece. :-))



  Seguir comentários via RSS

28 comentários em “Como vetar automaticamente comentários com spam no WordPress.

  1. Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

    “De quebra, adicionei para o script já enviar um header http com erro para os robots, já dando um legitimo chute na bunda deles, ”

    Eu tenho dúvidas de que esta seja a melhor resposta. Para um bot “desejável” como o da Google, seria. Mas no caso de spammers não seria melhor não dar resposta alguma ou até mesmo responder com um OK?

    Responder com “Not Acceptable” dá ao spammer um alerta e ele vai procurar um jeito de contornar. No caso bastaria escrever “c1alis” ou “c.ialis”, como aliás já é feito por muitos spammers.

    Quanto ao plugin, quero ser o segundo a testar :D

    Eu não sei como isso pode ser implementado, mas seria interessante banir o IP de quem caísse no filtro por pelo menos 24h. Banimento total, do tipo “esse site nem existe”. Para humanos, poderia ser exibida uma pergunta que se respondida corretamente além de permitir o comentário, evitaria o banimento.

    O tal plugin “Bad Behavior” é capaz de fazer isso.

    Comentários de Jefferson Ryan: 44

    • Luciano disse:
      Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

      Bom, o google não vai cair nessa, porque ele não posta comentários, esse header só será visto por alguma coisa que tentar socar um comentário e não leia a saida do stream do server.

      Mas isso pode ser removido apenas comentando ou apagando aquelas 3 linhas.

      Agora… com a criatividade dos spammers, colocando pontos ou outras nhacas na palavra pra desmascarar, ai já vira briga de gato e rato.

      Dai neste caso, eu acredito que o melhor mesmo seja fazer uma forma de liberar a postagem do comentário de uma forma que somente humanos entendam a bagaça e consigam faze-lo.

      Uma forma que pensei é substituir o recaptcha por um outro tipo de captcha mais simples, mas que não vai funcionar com OCR. Escolher umas dez figuras muito simples e fazer um script que sorteie uma figura dessas aleatoriamente e pergunte ‘o que diabos é aquilo’… tipo mostrar um desenho de um telefone, um gato, um cachorro, um carro, uma arvore… e por ai vai… queria ver um bot acertar isso eheheh.

      Quanto ao plugin, já esta em andamento, assim que tiver algo palpavel, eu te aviso. Por enquanto estou pesquisando a melhor forma de guardar as palavras, estou vendo como inserir isso no banco de dados do WP sem causar balburdias ou estranhezas. Depois vem a parte de como pendurar isso no WP, automaticamente.

      Já o banimento mesmo, eu acho meio complicado de lidar, visto que banimento por IP pelo que sei é um plugin de terceiros e eu nem faço idéia de como interfacear o meu plugin com esse outro, pra já acrescentar o IP maligno na lista.

      Porem eu acho que isso é complicado, visto que bots pode usar proxie ou até mesmo maquinas zumbis.

      Comentários de Luciano: 479

  2. Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

    “Porem eu acho que isso é complicado, visto que bots pode usar proxie ou até mesmo maquinas zumbis.”

    Eu sei. A idéia é impedir que aquele IP que reconhecidamente está nas mãos de um spammer continue consumindo banda/processamento e criando falsos hits nas páginas do site. Desconfio que é justamente esse tipo de atividade que às vezes faz a hostgator reclamar comigo. Eu sei que o mesmo spammer posta em diversas páginas do site no mesmo dia, mas não olhei se é usando o mesmo IP. Se não for, realmente não vai fazer diferença.

    Comentários de Jefferson Ryan: 44

    • Luciano disse:
      Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

      Bom, no meu pequeno universo, nas amostras que fiz, o IP sempre muda, os spammers não usam o mesmo IP. Mas lembre-se que isso reflete apenas o que acontece aqui.

      Mas um dado interessante, com a aplicação desse script nos comentários, feito a quase 48 horas, o spam zerou… por enquanto não tem mais nenhum spam entrando na fila de moderação.

      E quanto a ideia do captcha de figurinhas, o que tu achou? Ou da idéia do campo do form que deverá sempre ser deixado em branco?

      Comentários de Luciano: 479

      • Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

        Não sei dizer se as figurinhas vão funcionar. Para começar é preciso lidar com variadas formas de responder, a não ser que se use uma lista de respostas.

        Já o campo só vai denunciar os bots que preenchem todos os campos. *Acho* que seria mais efetivo confundir o bot misturando os nomes dos campos no código, mas exibindo corretamente para o humano no CSS. Assim o bot colocaria o e-mail no campo de nome, por exemplo. E a detecção disso o denunciaria.

        Comentários de Jefferson Ryan: 44

        • Luciano disse:
          Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

          Quanto as figurinhas, vou fazer um teste… vou pegar as figuras que eu acho que seriam interessantes de usar (detalhe… é de um site de desenhos para crianças colorirem, logo os desenho são bem simples), colocar em um post e vamos perguntar para os leitores dessa bagaça aqui o que eles responderiam para cada uma das 10 figuras.

          O teste vai ser no mínimo interessante. :-))

          Em tempo… fez um teste com o script modificado? Aqui no blog ele já esta rodando, e pelo que pude testar não confundiu as bolas.

          Se achar interessante, copie o código para o seu blog.

          Comentários de Luciano: 479

  3. Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

    Obrigado pelos acréscimos no script!

    A propósito, a variável $post_comment_content estava “sobrando” no script original, não estava? Vi que você a usou nesta última versão, mas eu já ia comentar que ela era redundante.

    Comentários de Jefferson Ryan: 44

    • Luciano disse:
      Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

      Pois é… estava sobrando, mas agora não está mais, utilizei-a para exibir a mensagem do comentário.

      Ah… essa modificação funciona direitinho desde que não use o plugin AEC (eu uso). Dai o primeiro comentário, funciona direitinho o wp_die. Mas no segundo e posteriores, o AEC entra com o AJAX e joga todas as tags html na tela de alert.

      Mas não esquente, no meu caso eu não me importo, e se você não usa o AEC não terá problemas.

      Comentários de Luciano: 479

  4. Claudio disse:
    Usando Google Chrome Google Chrome 23.0.1271.97 - Windows Windows 7

    Luciano, via dica do Jefferson eu adotei a sua “versão com um plus a mais” do script … Estou comentando aqui para agradecer a ambos e também para “assinar” a thread de comentários e acompanhar as novidades :-)

    Comentário de Claudio: 1

  5. Luciano disse:
    Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

    Bom… acrescentei mais um “plus” ao script, que estou testando agora. Inseri um campo no formulário de comentário que DEVERÁ ser deixado em branco (não pode ser preenchido!).

    Pelo que se analisa, os bots de spam preenchem todos os campos do formulário, para tentar se passar por um humano. Assim sendo, se o fizerem, será bloqueado.

    Para quem quiser testar o comportamento, eu deixei provisoriamente o campo visível, é este quadradinho com borda cinza que aparece logo acima da caixa de comentário.

    Coloque qualquer coisa ali e tente comentar…

    Agora vem uma questão que gostaria de discutir com vocês; como deixar esse campo no form. Pensei em dois jeitos:

    1) formatar o campo com CSS para que ele fique da mesma cor de fundo da página de comentários, dessa forma ele fica “invisível” a humanos, mas não a robôs.

    2) deixar o campo visível, com a mesma formatação dos demais, e colocar um label algo como: Se você não é um robô, não preencha este campo.

    Em ambos os casos, colocar também um tabindex maior do que o ultimo elemento do form de comentário, no caso o botão “postar comentário”. Assim mesmo que um humano use TAB para avançar os campos, ele não vai cair nesse campo, a menos que dê um TAB a mais do que o necessário para chegar ao botão.

    Qual será a melhor forma na opinião de vocês? 8-)

    Só lembrando para quem assinou o post, depois que este script estiver bem polido, e com todas as funções ok, a idéia é transformá-lo em um plugin, para que seja facilmente instalável por qualquer um, sem ter que editar uma virgula se quer no código do template, e ter uma página administrativa no menu configurações, para editar facilmente a lista de palavras proibidas, ok? Já estou trabalhando no plugin, e logo tenha algo usável, postarei.

    Comentários de Luciano: 479

  6. Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

    A resposta do script está uma bagunça. Tem formatação mas a janela de resposta não está renderizando-a.

    Eu achei que desse jeito que está no teste já está bom. A idéia do “se você não é um robô…” também é interessante porque muito humano vai preencher assim mesmo. E eu não quero esse tipo de humano no meu blog :D

    Comentários de Jefferson Ryan: 44

    • Luciano disse:
      Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

      Esse bug já esta explicado, é um problema que acontece quando usando o plugin AEC (vide a nota no rodapé do teste), pra quem não usa o AEC (que é o seu caso) não vai dar problema. No meu caso eu não me importo muito.

      Mas quando isso virar plugin, eu vou ver se tem algum jeito de detectar quando o AEC está ativo, e sim nesse caso, arrancar a formatação.

      Comentários de Luciano: 479

  7. Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

    Recebi uma quantidade considerável de SPAM nos últimos dias (25 – uns 12 por dia) e quase todos eram de dois spammers. O que havia em comum entre todos eles era o preenchimento do campo “site”. Raramente um visitante legítimo tem site.

    Se existisse um plugin que só permitisse o preenchimento desse campo por usuários cujo email já está na lista de usuários com comentários aprovados, isso já deixaria a minha caixa de spam limpa.

    Poderia haver um aviso do lado da caixa: “Não preencha se este for o seu primeiro comentário”.

    Claro, só será necessário chegar a isso se sua idéia de colocar um campo a mais não funcionar. Spammers que só preencherem os três campos básicos não vão cair na sua armadilha.

    Comentários de Jefferson Ryan: 44

    • Luciano disse:
      Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

      Aqui abaixou bem a quantidade, por enquanto só 6. E nestes 6 que cairam aqui, notei as seguinte peculiaridades, o campo site sempre é preenchido de forma inválida, não contem um URL, o que me leva a crer que eles não verificam qual e o valor que o campo deve conter.

      Nisso me passa outra idéia pela cabeça, tascar uma verificação no campo URL, pra saber se a URL é válida.

      Porém eu não me atentei nos emails para verificar se eles estavam preenchidos corretamente.

      Na pior das hipoteses, eu pensei em outra coisa hoje cedo… em vez desse campo em branco, trocar por um menu dropdown com duas opções, a primeira sempre selecionada por padrão: Eu sou um robô.

      E a segunda, que DEVERÁ ser selecionada para o comentário passar: Eu sou um humano.

      Eu imagino que os robots de preenchimento automático não verifiquem ou acessem menu dropdown.

      Comentários de Luciano: 479

      • Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

        Aqui quase 100% dos bots preenchem os campos corretamente, com um URL que pelo menos parece válido

        E a segunda, que DEVERÁ ser selecionada para o comentário passar: Eu sou um humano.

        Acho que funcionaria, sim. Mas só enquanto não se tornar popular.

        Comentários de Jefferson Ryan: 44

        • Luciano disse:
          Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

          Bom… eu coloquei pra testar também no script, uma checagem dupla na URL, ela deve ser minimamente válida (não é uma checagem profunda) e uma mais chatinha, uma tentativa de conexão.

          Se o URL for valido e estiver no ar (responder) o comentário passa para a verificação seguinte, já se a URL não for valida e/ou não responder a consulta, o comentário é bloqueado.

          Por enquanto (em teste) o script esta assim:

          1- Verifica se o campo “pega-bot” não foi preenchido, se sim, aborta.

          2- Testa se a URL foi preenchida, se sim passa num RegEx simplezinho, se é valida, ai passa num teste de conexão (faço um @fopen($link,”r”) e vejo se conecta), se conectar, libera, se não passar no teste do RegEx e’/ou @fopen, aborta.

          3- Verifica a lista de palavras proibidas no campo do comentário, se achou uma qualquer, aborta.

          Opcionalmente, estou pensando também em colocar no passo 2, uma blacklist de URL’s.

          O dropdown eu acho que seria uma boa pra se livrar do reCaptcha. :D

          Vamos ver até onde vai a esperteza dos spammers. }:D

          Comentários de Luciano: 479

          • Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

            2- Testa se a URL foi preenchida, se sim passa num RegEx simplezinho, se é valida, ai passa num teste de conexão (faço um @fopen($link,”r”) e vejo se conecta), se conectar, libera, se não passar no teste do RegEx e’/ou @fopen, aborta.

            Atualmente, isso não adiantaria nada no meu caso. Eu chequei agora e além de quase todos os URL serem válidos, apontam para páginas existentes mesmo. Aliás, o spammer que está me atacando coloca ali links para perfis que ele criou em blogs e fóruns e lá nesses perfis é que está o URL para o site que ele está promovendo. Acho que finalmente descobri por que tenho tantos registros falsos nos meus blogs!

            Isso é ruim, porque alguns webmasters podem cegamente colocar ryan.com.br em suas blacklists.

            Comentários de Jefferson Ryan: 44

          • Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

            Hummmm… é estranho, mas nenhum dos spammers atualmente registrados no blog incluíram link para site.

            Comentários de Jefferson Ryan: 44

          • Luciano disse:
            Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

            Eu tive um registro aqui hoje, que é batata que é de spammer, vamos ver…

            “w17rdyis”… olha só o nome de usuário. Claro que eu já chutei e bani. Mas no perfil dele, tava com site sim.

            Mas olhando bem a lista de usuários spammer daqui, notei duas peculiaridades… 90% dos e-mails são “.pl”. E nenhum deles preencheu o nome de usuário (hmmm olha uma brecha pra fazer um bloqueio de registro falso ai!)

            Comentários de Luciano: 479

          • Luciano disse:
            Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

            Bom… quase todos? Se quase todos são válidos, os que não são validos seriam descartados, é um ou outro a menos então. Mas preste atenção então em outra coisa, a repetibilidade das URL, se vem spam sempre do mesmo lugar. Se sim, ai a blacklist funcionaria.

            Agora essa de link pra perfil de fórum ai é phoda! Vira spam duplo, o cara faz ataque em um fórum, cria perfil falso com o que ele que “spammerizar” (inventei uma palavra eheh) e tê dá o link? Ai realmente fica difícil de combater.

            Nesse caso então acho que o que te salvaria é o dropdown menu que deve ser selecionado, isso se o seu spam é robotizado e não feito por “mulas”.

            Comentários de Luciano: 479

          • Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

            Acho que você poderia aumentar o número de “níveis” em cada thread. Há muito espaço no seu tema e já esbarrei no máximo aqui e não aparecem mais os links “responder”.

            …a repetibilidade das URL, se vem spam sempre do mesmo lugar. Se sim, ai a blacklist funcionaria.

            Existe, mas até agora está pequena. Preciso de um número de amostras maior por isso não estou apagando mais o spam.

            O spammer que botava mesmo prá lascar eu já barrei na primeira versão do script, porque ele colocava um de cada um de seus 12 URLs no texto do comentário e no campo URL. A maioria dos que sobraram só colocam URL no devido campo.

            Nesse caso então acho que o que te salvaria é o dropdown menu que deve ser selecionado, isso se o seu spam é robotizado e não feito por “mulas”.

            Todo o SPAM que me atinge agora é em inglês. Isso já ajuda porque as mulas não devem entendem português. Teriam que no mínimo chutar.

            Agora essa de link pra perfil de fórum ai é phoda! Vira spam duplo, o cara faz ataque em um fórum, cria perfil falso com o que ele que “spammerizar” (inventei uma palavra eheh) e tê dá o link? Ai realmente fica difícil de combater.

            A falta dos links está me deixando encucado.

            1) Ou o spammer sabe um jeito de usar o perfil para acessar a lista de emails de outros usuários (quero crer que isso não seja possível)…
            2) Ou algo que tenho instalado confunde o bot e o impede de preencher o campo URL;

            Em uma versão antiga do wordpress um determinado tipo de usuário abaixo do moderador podia ver os emails dos outros. Eu espero que isso tenha sido corrigido.

            Comentários de Jefferson Ryan: 44

          • Luciano disse:
            Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

            “Acho que você poderia aumentar o número de “níveis” em cada thread. Há muito espaço no seu tema e já esbarrei no máximo aqui e não aparecem mais os links “responder”.”

            Bom… tá em 5 mesmo que é o padrão do comment thread, eu não aumentei, por causa dessa caixa tracejada azul, iria ficar uma gorobora, vou estudar um jeito melhor de aninhar os comentários e aumentar isso um pouco.

            Comentários de Luciano: 479

  8. Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

    Achei o Modus Operandi deste plugin muito interessante:

    http://wordpress.org/extend/plugins/stop-spammer-registrations-plugin/

    Ele pode fazer o que você está implementando e várias outras coisas. Vou instalar e ver o que acontece.

    Comentários de Jefferson Ryan: 44

    • Luciano disse:
      Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

      Mas até mesmo a lista de palavras proibidas? Essa eu gostei de implementar, mesmo que isso não seja para parar spammer, mas ter uma lista de palavras banidas nos comentários é deveras interessante.

      Mas falando em plugin que checa IP, etc… a algumas horas atras eu instalei esse aqui:

      http://wordpress.org/extend/plugins/avh-first-defense-against-spam/

      Botei ele pra vigiar o IP dos spammers, vamos ver como se comporta também.

      Comentários de Luciano: 479

      • Usando Mozilla Firefox Mozilla Firefox 11.0 - Windows Windows XP

        Ele checa palavras proibidas nos campos autor e email. Coisa que o script não faz (mas poderia). Boa parte do meu spam pode ser eliminada com isso. Mas ele bem que poderia checar o campo URL também.

        Comentários de Jefferson Ryan: 44

        • Luciano disse:
          Usando Mozilla Firefox Mozilla Firefox 12.0 - Windows Windows 2000

          Ah é? Eheh, fazer o script vigiar os campos autor, e-mail e url a procura de palavras da backlist é dois palitos :)

          A única coisa é saber se é melhor deixar esses campos com checagem como esta hoje, via RegEx que pega as palavras exatas, ou aplicar o método mais agressivo, que pega até pelo meios das palavras…

          Bom… não vou fazer isso agora porque eu já estou indo pra cama. Mas amanhã a noite e faço isso.

          Comentários de Luciano: 479

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

 

:D :tooth: :mrgreen: :-P :-)) (lol) .:lol:. o:-) 8-) :-$ :-| }:D :-/ -_- |-/ :X.: =X 8|( :xxx :furious: :-o* X-P 8x :censored: *~O more »
 

1) Os comentários são moderados.
2) Comentários que não sejam referentes ao assunto do post serão excluídos.
3) Eu posso editar seu comentário antes de publicar, se o achar necessário.
  Melhor visualizado a
1024 x 768 True color
Proudly powered by WordPress. Theme developed with WordPress Theme Generator.
E altamente gambiarrado por mim mesmo :)
Copyright © 2010 by Crash Computer. All rights reserved.
Switch to mobile version