Solucionando Spam com Captcha Inverso

Posted by Daniel Lopes on 25/10/2008

Definitivamente spams são um problema terrível nos dia atuais… não pode ser solucionado com leis absurdas e desenvolver um algoritmo para bloqueio é um trabalho monstruoso. Então logo pensamos em soluções de terceiros como o Akismet (muito usado em blogs e formulários de contato em sites) ou captcha que também não é fácil de implementar a menos que utilize soluções como o Recaptcha .

Ótimo, então temos duas soluções simples que praticamente não temos que fazer quase nada, mas qual o grande problema? Askimet é pago para soluções comerciais e o captcha é altamente criticado por suas dificuldades com acessibilidade (está certo que é possível implementar soluções do captcha com aúdio mas complica mais ainda a implementação).

Mas na minha opinião o captcha não é ruim apenas para acessibilidade, mas também para qualquer usuário. E horrível tentar ler o que está escrito nas imagens, enviar o formulário e ver que errou, depois errar de novo e até sair da cadastro.

Absolutamente desistido de qualquer umas dessas soluções, acabei encontrando uma forma muito simples de solucionar as centenas de spams que recebíamos. O captach inverso.

Que consiste na técnica simples de colocar um campo de formulário como hidden, e normalmente os bots de spam não diferenciam dos outros campos e acabam preenchendo-o e enviando o formulário. O que temos que fazer é apenas ignorar todos os comentários que possuam o campo hidden preenchido.

No caso do blog aqui do escritório usamos o Mephisto para sistema de blog( desenvolvido em Rails), e implementar isso em Rails seria muito fácil, mas como quase tudo em Rails, existe uma solução desenvolvida em forma de plugin para o Mephisto. Cortesia de Sven Fuchs.

Para utilizar é bem simples( veja o post sobre o plugin no blog do autor ):

script/plugin install 
http://svn.artweb-design.de/stuff/mephisto/mephisto_inverse_captcha/

Lembrando que “script/plugin install repostiorio” deve ser executado tudo em uma linha apenas, no terminal.

Em seguida basta alterar o seu template(partial) de comentários (_comments.liquid) do seu mephisto para algo como abaixo:

<p>
  {{ form.name }}
  <label for="author">
    <small>&nbsp; Nome (obrigatório)</small>
  </label>
</p>

<p>
  {{ form.sneaky_email }}
  <label for="{{form.sneaky_email_codename}}">
    <small>&nbsp; E-Mail</small>
  </label>
</p>
  <p id="comment-email">
     Se consegue ler este trecho, o seu browser não trabalha bem com CSS. <br />
     <strong>Não preencha nada aqui!</strong><br />
     {{ form.email }} 
  </p> 

No template acima estamos adicionando o campo sneaky_email_codename que deverá se visível ao usuário normal e o campo email será escondido, o plugin irá verificar quais campos estão preenchidos e colocar os valores nos locais corretos.

Esta solução é focada em Mephisto/Rails mas pode ser implementada facilmente em qualquer linguagem.

Até o momento esta solução tem sido perfeita para nós e amigável para nossos usuários, esperamos que seja útil para você também.

blog comments powered by Disqus