Brigando contra SpamBots
Posted on July 18, 2007
Desde minha antiga instalação do blog com o Typo, até agora com o Mephisto, uma coisa que começou a me perturbar foi a quantidade crescente de comentários Spam que apareceram no meu blog.
No começo não havia nada, tudo limpo, apenas o comentário dos leitores do blog. De repente, começou a aparecer as boas e velhas mensagens do tipo enlarge your p&nis e similares. Foi quando eu criei uma conta no Wordpress.com para pegar uma chave Akismet. Para quem não sabe, Akismet é um serviço de filtro contra spam. Tanto o Typo quanto o Mephisto (no mundo Rails) e outros produtos como Wordpress (uma excelente plataforma, diga-se de passagem) já suportam o Akismet.
Todo novo comentário no blog passou a ser filtrado por esse serviço. Isso cortou quase todo o Spam. Por um tempo, foi bom. Até que outra vez começou a aparecer mais e mais comentários Spam. Não tem jeito: para cada nova técnica anti-spam, os malditos script-kiddies saem com uma maneira de burlar. E eis que começa a aparecer vários spams.
No meu novo Mephisto, ele próprio, na dúvida, não publica a mensagem mas eu fico com uma lista enorme para apagar. Algumas mensagens começaram a vazar para a homepage. Foi quando resolvi aumentar um pouco mais a proteção. Uma das formas de fazer isso é colocando um Captcha que são aquelas imagens distorcidas que – teoricamente – só humanos conseguem distinguir. Infelizmente alguns Spambots começaram a burlar alguns tipos de captchas. Outro tipo são perguntas, como operações matemáticas simples, que você precisa responder.
Eu particularmente não gosto de nenhum desses esquemas. O captcha em forma de imagem em especial porque você gasta tempo de processamento para gerar uma imagem aleatória. E as duas eu não gosto porque é algo a mais que eu, como usuário, sou obrigado a digitar sem querer. Eu detesto digitar coisas que não preciso. Colocar um cadastro, pelo mesmo motivo, está fora de cogitação: eu detesto ter que me cadastrar para comentar, provavelmente vocês também não iam gostar.
Foi quando eu li este post. A idéia é genial pela simplicidade. Ele chama isso de captcha-negativo ou captcha-inverso. Em vez de exigir que você digite alguma coisa, ele espera que você não digite alguma coisa. E para enganar o Spambot, eu escolhi o campo de e-mail (oops, espero que nenhum de vocês lendo seja um desses script-kiddies-abortos-da-natureza). Vocês devem ter notado que o campo de e-mail “sumiu” do formulário de comentários. Na verdade ele ainda está lá, mas com um CSS para deixá-lo escondido.
Só que um Spambot não tem “olhos”, ele vai puxar a página, analisar, notar que existe um formulário de comentário, vai reconhecer os campos e preencher todos. Aí ele cai na armadilha: pois ele vai “enxergar” o campo de e-mail e vai preencher. Nesse caso o comentário será rejeitado. No caso do Mephisto, comecei modificando o mephisto_controller.rb:
1 2 3 4 |
(...) @comment.save! if @comment.author_email.blank? (...) end |
E depois o formulário, no caso particular do meu tema, eu modifiquei o template single.liquid:
1 2 3 4 |
</dl>
<div id="easter-egg">
<label>Email:</label>{{ form.email }}
</div>
|
E, finalmente, acrescentei no stylesheet do meu tema:
css#easter-egg { display: none; }—-
“Mas agora como eu vou divulgar meu e-mail?” Vocês podem perguntar. Pensando no assunto foi que me caiu outra ficha: “para quê vocês querem divulgar seus e-mails?” Se for seu e-mail de verdade isso é péssimo, porque existem diversos tipos de Crawlers que vasculham diversos sites justamente em procura de e-mails para criar listas de Spam. Se seu e-mail aparece publicamente num site, ele é passível de ser registrado em alguma lista de bot (nunca se perguntou porque você recebe tanto Spam mesmo sem se registrar em sites capciosos?). Por outro lado, o site poderia exigir o e-mail porque ele quer 1) estudo de marketing (?); 2) fazer uma mala-direta interna; 3) vender seus e-mails para listas de spams (mais provável). Como eu não estou interessado em nenhuma dessas coisas, chego à conclusão que meu blog não precisa ficar mostrando seus e-mails publicamente.
Se quiserem divulgar seus contatos, usem o campo de “Site” e publiquem seus blogs. Se quiserem falar comigo, meu e-mail já é bem público (eu recebe centenas de spams, mas o Gmail dá conta). Se quiserem falar uns com os outros, agora tenho meu Google Groups que, para todos os efeitos, é um pouco mais seguro.
O resultado: desde que implementei este truque simples não recebi mais nenhum comentário spam. Claro que essa solução é simples demais. Alguém pode criar bots que não preenchem alguns campos aleatoriamente, ou podem criar um bot que analise o CSS e descubra o bloco escondido, mas até agora, parece que estou conseguindo barrar esses bots.
Esses script-kiddies desperdiçam minha banda, desperdiçam o tempo de processamento do meu site, desperdiçam meu próprio tempo em ficar brigando e volta. São gente incapacitada de alguma maneira, gente anti-social, gente com claro degeneração psiquiátrica, gente que não é gente, definições certas de “abortos da natureza”. Felizmente essa espécie de parasita não tem capacidade de ‘reprodução’, portanto não deixam descendentes. Amém ao Darwin!
blog comments powered by Disqus
Archives
- February 12(2)
- December 11(1)
- November 11(4)
- October 11(6)
- September 11(5)
- August 11(1)
- July 11(5)
- May 11(4)
- April 11(11)
- March 11(4)
- February 11(3)
- January 11(4)
- December 10(9)
- November 10(2)
- October 10(10)
- September 10(4)
- August 10(6)
- July 10(14)
- June 10(16)
- May 10(8)
- April 10(14)
- March 10(9)
- February 10(6)
- January 10(14)
- December 09(10)
- November 09(10)
- October 09(7)
- September 09(19)
- August 09(4)
- July 09(12)
- June 09(7)
- May 09(12)
- April 09(11)
- March 09(9)
- February 09(9)
- January 09(12)
- December 08(14)
- November 08(20)
- October 08(15)
- September 08(18)
- August 08(25)
- July 08(13)
- June 08(21)
- May 08(29)
- April 08(27)
- March 08(12)
- February 08(32)
- January 08(31)
- December 07(27)
- November 07(30)
- October 07(25)
- September 07(28)
- August 07(16)
- July 07(15)
- June 07(16)
- May 07(7)
- April 07(13)
- March 07(8)
- February 07(9)
- January 07(24)
- December 06(17)
- November 06(17)
- October 06(15)
- September 06(38)




