Resumo: CAPTCHA de pobre, com texto ao invés de imagens, funciona para bloquear SPAM em comentários.
Desde os primeiros passos do meu site, ele já contava com um “livro de visitas” onde os visitantes podiam deixar seu recado registrado. Os primeiros recados datam de Junho de 1999!
-
O Pedro inaugurou. Naquela época ele me mandou de presente um CD da excelente coletânea Punkadaria, lançada pelos integrantes da Tequila Baby em 1998. Escuto até hoje, tem várias bandas muito boas do punk rock gaúcho. Ainda está por aqui Pedro?
-
O segundo foi o carioca Milhouse, amigo, parceiro e folgado de plantão com quem converso por MSN até hoje. Ele é meu fornecedor oficial de links para vídeos idiotas no YouTube. Lembra do They’re taking the Hobbits to Isengard? Então, foi ele. O blog do Milhouse é bem divertido, ele escreve com bastante bom-humor. Se você gosta dos textos daqui, é bem capaz que goste dos de lá também. Só falta arrumar esse Feed tosco né meu? Ah, deixe um comentário lá dizendo que o Rio é violento que ele vai A-DO-RAR.
-
Depois veio meu grande amigo, ex-colega de Conectiva e parceiro de Atacama MárcioMan. Hoje ele é um respeitável pai de família que mora lá longe no Recife, continua trabalhando com nerdices e aparece aqui no blog de vez em quando. Ele tem um blog também, só falta tirar as teias de aranha :D
Mas então, voltando ao tema, o livro de visitas é um programinha que começou como um shell script fuleiro. Depois foi crescendo e acabei rescrevendo em PHP (o LES vai fazer algum comentário com “toy language”) em 2001. A evolução continuou e hoje considero este um script maduro.
À medida que o site crescia, começou a aumentar o número de SPAMs no livro de visitas.
Um SPAM é um recado oportunista e indesejado, geralmente uma propaganda comercial ou links para sites pornográficos. Como se isso já não fosse irritante o suficiente, geralmente são programas que enviam estes recados automaticamente, então não adianta simplesmente apagar que ele vai ser enviado novamente. Alguns enviam diariamente esse lixo para o seu site, imagine o tamanho da dor de cabeça.
Quando finalmente me enchi de ficar apagando os SPAMs manualmente, resolvi adicionar algumas checagens no programinha de livro de visitas, para que esses recados indesejados nem fossem registrados.
Fase 1 – A corrida de gato e rato
Comecei de maneira ingênua e no início até que funcionou. Cada vez que um recado indesejado chegada, eu cadastrava o e-mail de quem enviou (ou alguma outra palavra-chave) em uma lista. Assim, se no futuro esse cara tentasse enviar outro SPAM, seria impedido pois ele já estava na lista negra.
Então meu trabalho era ficar aumentando essa lista com e-mails e palavras-chave cada vez que eu recebia um SPAM. Isso funcionou satisfatoriamente por quase um ano.
Essa técnica funciona para os spammers (programas e indivíduos que enviam SPAM) mais pé-de-chinelo, que sempre enviam o mesmo texto. Mas alguns deles evoluíram e hoje usam e-mails e textos que mudam a cada envio, tornando minha lista quase inútil.
Voltei a receber muito SPAM e eles estavam inundando o site. Droga, vão me fazer mexer no programa…
Fase 2 – A ilusão das cores
Entendi que a lista acabou tornando-se uma solução fraca e fácil de burlar, era preciso algo mais inteligente, ou usar outra abordagem.
Tá, se eu não consigo diferenciar um spammer de um visitante comum pelo e-mail nem pelo texto, preciso pensar diferente. Ah, claro, o CAPTCHA! Aquelas imagens distorcidas com palavras ou códigos quase impossíveis de ler que são um pé-no-saco.

A idéia é simples: como são programas que enviam os SPAMs, essas imagens são barreiras que teoricamente somente um humano consegue burlar. Teoricamente. Hoje há programas que conseguem ler estes códigos, mesmo os mais distorcidos. Até aqueles que nem você consegue :D
Como eu não gosto de ter que ficar adivinhando códigos quando vou em um site, não quis colocar isso no meu. Em uma manhã qualquer de devaneios, tive uma idéia “brilhante” para meu anti-spam de terceiro mundo: vou usar cores!
Ao invés de um código distorcido, mostro uma cor qualquer na tela e o visitante vai dizer qual o nome dessa cor. Assim vou diferenciar humanos de robôs. Pareceu uma boa idéia e era simples de fazer.
Só que para não ser mala de fazer o usuário ter que digitar o nome da cor (amarelo, verde, vermelho, etc), fiz um menu com os nomes das cores e bastava escolher o item correto.

Santa inocência… Nos pouquíssimos dias que essa solução tosca ficou no ar, recebi dezenas de SPAMs. Esqueci do pequeno detalhe que estes programas de envio de recados usam técnicas de força bruta. Então eles ficam tentando todos os itens do menu, até acertar.
Droga. Lá vamos nós de novo…
Fase 3 – Digite o número aí do lado
Tá, as cores não deram certo. Preciso de algo parecido com o CAPTCHA, mas que não seja tão mala. De repente, a idéia aparentemente inofensiva: e se eu simplesmente mostrasse um número qualquer para o visitante digitá-lo? Algo como:
Digite esse número (1234): [ ]
Mostrando os números na tela mesmo, como texto e não imagem, sem distorção. O visitante pode até copiar e colar se preferir. E os deficientes visuais também poderão deixar seu recado. Pareceu tão ridículo de simples que podia funcionar.
Imediatamente após essa idéia, tive dois pensamentos:
-
Que mané. Os spammers vão ler o código e preenchê-lo automaticamente.
-
Mas ei! Eles mandam SPAM para milhares de sites, nem a pau que vão se dar o trabalho de incluir uma regra para o meu sitezinho.
E apostando que eu era apenas mais um na multidão, fiz a barreira com os números. E não é que tem funcionado?
Vou completar um mês de calmaria no livro de visitas, com alguns poucos SPAMs que parecem ter sido enviados por humanos que preencheram o código. Mas como eles são absoluta minoria no mundo spammer, é pouco para me incomodar. Agora até posso voltar a lista negra para pegar estes gatos pingados.
Conclusão: Técnicas “de pobre” também funcionam. Foram apenas alguns poucos minutos para escrever e testar o código e estou feliz, ganhei tempo. Ou melhor, parei de perder tempo apagando lixo.
Claro que com esse texto explicando tudo, corro o risco de algum mané querer burlar meu filtro tosco. Novamente vou acreditar nas probabilidades. É tão ridículo de fácil de quebrar meu filtro que qualquer “ráquer” estagiário vai rir do “desafio”. E os spammers profissionais não lêem meu blog. Acho…
Tá, ainda não consegui não fazer um tutorial… Quando vi já foi. Fica pra próxima…




Pingback: Como criar um CAPTCHA (versão ASP) « henrique · araujo
É uma boa solução!
Se furarem essa, você pode tentar um “Qual é a quinta palavra do post?” ou quem sabe até um Quiz. Já pensou? Um “Show do Comentário” onde você tem que responder a perguntas de conhecimento geral pra poder comentar no fim…
Boa. Mas como eu sou um sysadmin preguiçoso e não um programador criativo, optei por usar http://akismet.com + http://www.theblog.ca/?p=21 =D
Pelo menos aqui, estou “limpo” de spam à 6 meses =D
[ ]‘s
Olá =)
Sim, sim, receberá mais visitas.. nesse momento mesmo.. olha eu aqui de novo.
Ah! Obrigada pela gentileza nos elogios, mas eu também gostei bastante do seu blog, até xeretei em todass as partes possíveis dele.
Te coloquei entre meus blogs favoritos até (uauuu! rs) mas espero que isso não faça cair o nível dos frequentadores que aparecem aqui no seu, não me responsabilizo, tá? =P
Muito boa a técnica. O problema é se isto cair no gosto público, ficar pop. Aí os spammers vão sim se dar ao trabalho de descobrir como se burla.
[]‘s
Bardo: Boa idéia! Ou ainda, “termine o Super Castlevania IV sem perder vidas para comentar” :D
jalexandre: Akismet detona! Tem aqui no WordPress.com e é o que salva. Mas sabe como é, reinventar a roda é sempre tão sedutor… :)
Maíra: Valeu pelo link! Quanto ao nível, não se preocupe porque o autor do blog já é tosco, o que vier é lucro hehe
Davis: Essa com certeza não é uma idéia nova e o CAPTCHA foi a evolução do conceito. Eu estou contando com a sorte de não ser “descoberto” pelos spammers mais evoluídos. De qualquer forma, a brincadeira de gato e rato é divertida :)
Aurélio,
Uma sugestão para tornar um pouco mais eficiente:
Utilize hexadecimais na geração dos números, como 1 2 3 4 5
Aí exclui os spammers que não lêem hexa! ;-)
PS: para quem não entendeu, será apresentado ao usuário como decimal, apenas no fonte terá &#x??;
Aurélio também é cultura. Não sabia que o nome disso era CAPTCHA.
Ops, era para ter aparecido 1 2 3 4 5 …
Certa vez vi um blog que sempre mostrava uma imagem escrito “pants” (calças). Tinha até um post sobre isso, onde ele dizia que nunca recebia spam e usava só essa mensagem.
Ei, gostei dessa da imagem fixa! Vou usar caso quebrem meu código tosco :D
Aurélio,
Outra sugestão: http://ploum.frimouvy.org/?150-the-invisible-captcha-mechanism-icm-against-form-spam
Bem interessante, usando campos hidden pra detectar bots.
Abraço.
Tem um tal de Jeff Hawkins que estuda o cérebro e alega ter inventado a verdadeira inteligência artificial. A comunidade científica não bota fé, mas enfim…
.
Ele cita como exemplo de algo que os computadores de hoje são incapazes de fazer o reconhecimento de coisas simples em imagens, ou seja, determinar o que se vê em uma foto: um cachorro, uma árvore, um trem, um pirulito.
.
Então, acho que um sistema de captcha com uma coleção de pelo menos 100 imagens seria muito difícil de quebrar, e bem fácil de identificar até para uma criança (ao contrário daquelas letras distorcidas).
O problema das imagens é que você impede os cegos de comentarem. Aliás, já recebi um recado de um cego lá no site das Funções ZZ. Sim, eles surfam e participam! Não é justo dar-lhes o mesmo tratamento que recebe um famigerado robô de SPAM! :)
(Afinal, falar “cego” é realmente ofensivo? As outras alternativas “deficiente visual” e “pessoas com necessidades visuais especiais” são muito burocráticas…)
http://jayallen.org/projects/comment-challenge/
É pra MovableType mas a idéia é exatamente a mesma.
Só comentando sobre o Rio: teve um assalto aqui na rua do lado, 5 tiros.
Tá foda.
Bom o tema.
Gostei da solução.
Não gosto de digitar esses códigos. Prefiro ver uma string randômica de 64 bytes, marcar e colar, que digitar algums teclas. O bom do seu é ser prático sem mouse, além de “colável”.
Usando a referência em um input text, acho que também daria para copiar e colar a la windows, sem o rato. No lynx não sei, não sou tão nerd assim.
No seu caso acho que uma string fixa teria quase o mesmo efeito, pois o diferencial é o mecanismo em si. Mas nerd que é NERD precisa implementar um geradorzinho randômico, logicamente. :)
Também estou gostando das dicas dos visitantes.
Tio Gooooooooooogle, tem muita info aqui!
Vamos fazer o possível pra dar muuuuiiito trabalho pra esses espa-mer…
Isso aí, também estou curtindo bastante os links e idéias aqui nos comentários, a participação está com altíssimo nível!
Acho que estamos no caminho certo, o blog fica mais rico em conteúdo e isso beneficia a todos.
Valeu moçada, continuem!
Tem uma bem simples, e que resolve 99,999999% dos casos.
“Quanto é 1+1 ?” se quiser você coloca a resposta ali mesmo, ouqualquer coisa coloca o 1+1 como imagem (gifzinho qualquer) assim fica mais dificil de algum script super avançado burlar :D
Zoréio, amiguinho: eu sou zura e egoísta, por isso tirei os comentários do meu blogue. afinal, o blogue é meu, quem escreve sou eu. quer escrever, faz o teu.
e não sou eu quem ficou lamentando quando roubaram a a flanelinha de um carro ae. que não vou dizer de quem é, nem em que cidade foi isso.
rá, sacaneei.
;)
aehueahaeuhaeuaheuhuheueahaueaeuaeuaeuheauueah
ultimo comment tá foda.
ahueahaeuhaeueahuaeheauhuh
Mas não tou falando que esse Milhouse é um carioca folgado? :D
Sim, os cegos devem ser lembrados, como bem lembrou você. Neste caso, que tal DOIS sistemas? Um com imagens e outro com sons. Perguntas bem simples feitas num arquivo de som também devem ser instransponíveis para os robôs.
.
Ouvir som direto no browser com Linux é uma nhaca, mas já quebra um galho.
Já usei formulários que eram remetidos ao meu e-mail, comecei a receber spam mas também desisti do site que tinha rapidinho.
Um ótimo tema o post, realmente o assunto é preocupante. Legal, quando eu tiver uma necessidade voltarei aqui para usar a solução top da top da top da top.
Então o Verde tem um blog…Bom saber.Tenho o que ler na faculdade.
Ainda está com o Mac OS?
Eu nem sabia que aquela desgraça daqueles códigos de letras que raramente eu acerto de primeira tinha nome.
Gosto tanto dos numerozinhos, tão mais lindos ;D.
LES: Se for pra ter todo esse trabalho, aí prefiro retirar os comentários do ar… É mais eficiente :)
Henrique: A solução top da top da top da top é só receber comentários enviados por carta, pelo correio! :)
isis: Quanto tempo! Que bom vê-la por aqui. :*
beeanka: :D
Nãoooooooooooooooo! Não faça isso Aurélio.. tá certo também que eu gosto de conhecer as coisas pra falar mal.. mas aí no caso você só precisa de uma música pra ouvir e poder criticar My Chemical Romance.. um disco todo é exagero =P
Obrigada pela dica de vídeo.. espetacular….hahahahaha
Ah! obrigada também pelo apoio em relação ao “The Calling”
Muito trabalho? Ué. Mas é pra implantar de verdade? Pensei que fosse só papo furado de boteco virtual. Ah, então eu tô fora!
.
Ainda mais se for em toy language…
Acho o sistema que o registro.br está usando interessante. Ele mostra uma imagem sem distorção e faz perguntas do tipo: quais as vogais que aparecem, qual as 3 primeiras letras, etc.
Show de bola!
Gostei do post.
Abraço!
Maíra: Ih, tarde demais… Já ouvi o disco todo umas cinco vezes, mas é simplesmente chato. Não ouvi nada demais, The Used é melhor. Mas tem uma música que se salva no disco, que curti bastante: I’m Not Okay. Ah, eu confudi The Calling com Creed, mas Wherever You Will Go é massa de qualquer forma (e ambos cantam com a batata na boca) :)
LES: Ufa, já estava sentindo falta do comentário Toy, achei que você estivesse levando o PHP a sério agora, que susto ;)
Bruno: Legal mesmo, gostei! Mas daí acho que nem precisava de imagem, podia ser texto normal mesmo…
Doufer: Valeu!
nuss pode crer ai
voce tem bouas ideias
tambem kra trampava
na conectiva neh
hahahahaha
achu legal seu site
desde que eu usava o conectiva 10
mas agora uso o lixo do OpenSuse 10.2
mas vou migrar eu sei que vou
Debian Force
hahaha
peace all
Ainda bem que achou chato..e só ouviu 5 vezes..imagina aquele que gosta :-), pelo menos diz que é chato com muitooooo fundamento…rs…
Poxa! Não se compara The Calling com Creed.. gosto bem mais de Creed, The Calling digo mais para aterrorizar roqueiros.. é.. nunca fui uma boa pessoa.. =P
Putz, depois que escrevi o último post lembrei de você.. pensei “vai que ele lê mesmo tudo aqui”… imagina só… alguém que entende muito bem dessas coisas, lendo aquelas barbaridades envolvendo disjuntor.. QUE VERGONHA!!!
Beijo!
Aurélio, no caso do Registro.br é segurança reforçada. hehehe
Mas acho muito boa a abordagem deles.
“Cachorro mordido de cobra…”
Bom, como sempre eu utilizando as suas idéias hahahaha
Implementei lá no meu site, o Captcha de pobre, através do pedido de um resultado de uma soma.
Pelo menos, até o momento, a coisa melhorou para caramba.
Não recebi nenhum dos spams que eu andava recebendo :-)
Vamos ver até onde vai, e se alguém realmente não vai conseguir quebrar esta nova funcionalidade :-P
Acho que dá pra fazer algo mais “de pobre” definindo palavras através de instruções
(Ex.: palato – to + vra = ???).
Já fiz isso com imagens, dá pra fazer com texto. Fica fácil para leitores com deficiência visuais.
O problema são os leitores com deficiência de paciência…
Enfim, o que você(s) acha(m)?
Abração
teste
Olha isso, Lelo!
http://community.livejournal.com/lbello_english/5562.html
bah!
Pois é…eu tabem nunca tive problemas com meus sites, e sempre uso soluçoes simples…
Realmente muito interessante e válido…
teste test teste test teste test teste test teste test teste test teste test teste test teste test teste test teste test teste test teste test teste test
Eu utilizo números aleatórios com ip e time()
$ip = $REMOTE_ADDR;
$ctemp1 = substr(md5(uniqid($ip)), 5, 4);
$ctemp2 = substr(md5(uniqid(time())), 5, 5);
$codseg=$ctemp1.$ctemp2;
Vc poderia explicar como vc faz esse formulário anti spam?
Os que eu soube, usam php e o servidor tem que permitir, claro.
Procuro algum simples e que possa ser utilizado em host gratuito.
ce blog a une rpopension très forte à me fzaire prendre mon piedn! :)
Olá Aurelio,
gostaria de ver o teu código.
Pois estou com este problema no meu site.
Att,
Mamutys
Olá Verde,
Como leitor (e comprador, claro) dos seus livros (vem cá, num vai sair livrinho novo não? ser ser atualização), queria era ver como tu implementou o código pra usar também. Claro que como bom discípulo eu não vou me conter em fazer ctrl+c ctrl+v, mas assim como nas funçõeszz, que aliás me quebraram um galhão quando precisei fazer calculos de data e extrair dados de páginas, quero ver a lógica implementada pra usar gerar um pro meu.
Abraços cara e aguardo novos livros teus.
Jeferson, primeiramente, muito obrigado por ter comprado os livros! Quanto ao fonte do CAPTCHA, o link está lá no finalzinho do livro de visitas. Abraço!
Sou cego e acho o captcha uma merda. Este sistema de números randômicos me agrada.
Mas tenho algumas idéias que poderiam ajudar. Baseiam-se em javascript, porque eu acredito que os programas spammers não executam javascript nos formulários.
Uma solução é, ao se clicar no botão “submit”, um script renomear os nomes dos campos do formulário para nomes válidos. Assim, envios sem o processamento do javascript retornaria os campos com nomes inválidos, portanto, não seriam aceitos.
Outra idéia é ainda mais absurda, mas poderia até funcionar: pedir para que não preencham o campo de captcha! Com CSS é possível ocultá-lo, de forma que apenas os bots os encontrariam. E este nem depende de javascript. O resultado é que apenas captchas não preenchidos retornariam válidos.
Outra solução é preencher o campo de verificação com javascript ao se carregar a página. Poderia ser um input type=”hide” id=”password” value=”spam”… ao se carregar a página um script em javascript, no rodapé da página, alteraria o valor password.value = “1234″ validando assim o formulário.
Se a merda do spammer executar scripts em javascript, então podemos incluir um botão oculto que, ao ser clicado, aciona um loop que vai, lenta e gradativamente, preenchendo uma variável com caracteres aleatórios até esgotar a memória. Se combinarmos este script com aquele que valida os nomes dos campos ao submeter o formulário, provavelmente o javascript seria desativado ao travar, impedindo que valide corretamente o formulário. Pena que eu não sei se é possível pendurar o servidor de um spammer com javascript, porque isto seria muito divertido.
Uma solução muito interessante é a que o site registro.br aplicou ao seu serviço de who.is (ref: https://registro.br/cgi-bin/whois/?c), em que a pergunta e o captcha estão dentro da imagem, e geralmente tem a ver com o visual do captcha. Ex: Captcha: 546tdu (todos coloridos), pergunta: “Quais NÃO são NÚMEROS?” ou “Quais são VOGAIS?” ou “Quais LETRAS são AZUIS?”. Além desta alternativa diferente, as vezes deveriamos pensar em eventos que só seriam disparados por uma interface, como o onMouseOver, aí disparariam métodos que preecheriam um campo captcha hidden que validaria o post, então nem um brute force chegaria ao sucesso. Lembrando ainda da situação citada pelo Ângelo Beck. A opção do captcha sonoro, gerado sob demanda, tem sempre que ser agregável a qualquer outra solução.
Gostei muito desta matéria cara!
Boas idéias eu encontrei aqui. Com certeza algumas delas eu vou utilizar para o sistema que irei desenvolver. Quero analisar várias implementações com diferentes captchas e ver qual se sai melhor contra os malditos bots. Meus planos são de fazer um sistema o mais simples o possível, com acessibilidade máxima (tentando não excluir nenhum tipo de pessoa), mas nem por isso pouco confiável. Espero conseguir encontrar a solução para este problema da internet (sei que isto é muito pretencioso, mas temos que ter fé, afinal, se o homem conseguiu pisar, porque não conseguirá resolver este problema aparentemente simples).
Esta do Ângelo Beck eu vou levar a frente…
Gostei mt do post…
Eu fiz um usando a mesma ideia, e também nao tive mais problemas, também tentei milhares de formas toskas… e dai fiz assim numero normal sem distorção.. usando uma imagem simples com numeros escritos bem legiveis haha.. até agora sem problemas, o meu tbem é facil de burla.. mas como você disse.. os spammer nao vao fazer uma regra exclusiva para meu site.
tens o script dessa coisa? tenho o mesmo problema e é um saco faze isso
kk, mo simples e funcionou muito bem, pra tia aqui de cima, vc só tem que cria uma $_SESSION com ons numeros, ai depois vc faz uma confirmação, por exemplo em php,
$captcha = $_POST['captcha'];
session_start();
if($_SESSION['CAPTCHA'] == $captcha){
//Aqui vc coloca o codigo que vc usa pra poder enviar ons dados
}else{
//aqui funciona assim se a ons numeros digitados não for iqual a os da $_SESSION, faz esses codigo de comando a baixo, por exemplo
echo “Codigo Incorreto”;
}
Espero ter ajudado
if($_SESSION['CAPTCHA'] == $captcha){
//Aqui vc coloca o codigo que vc usa pra poder enviar ons dados
}else{
//aqui funciona assim se a ons numeros digitados não for iqual a os da $_SESSION, faz esses codigo de comando a baixo, por exemplo
echo “Codigo Incorreto”;
}
Muito legal seus posts, uma outra solução simples seria fazer perguntas relativamente simples, que qualquer criança poderia responder, menos um bot, por exemplo:
Qual desses animais vive na água (gato, peixe e elefante)?
Só copiava e colava a resposta, sem impedir cegos de comentarem ;D
Eu estava pensando numa ideia um tanto estranha para validar a resposta para que um bot não possa responder.
eu escolho uma pergunta qualquer, tipo: complete a frase. temos uma frase de poucas palavras e um ou dois espaços no meio. estes espaços possuem um listbox com diversas palavras aleatórias, sendo apenas uma a palavra correta.
Como a frase esta em português, os programas de spam conhecidos terão dificuldade para reconhecer. No PHP vc pode pegar o IP de quem esta abrindo a página e impedir que a palavra correta apareça caso o IP do visitante tentou abrir esta mesma rotina mais de uma vez nos últimos 30 segundos. Como este processamento rola no serverside, o visitante só ve o html resultante. Acredito que pessoas cegas possam escolher de um listbox facilmente, é algo simples que dois ou três cliques possa responder,
Como as frases são simples, voce pode colocar palavras aleatórias como respostas erradas.
tipo:
O RATO ___ A ROUPA ___ REI DE ROMA
PARABÉNS PRA VOCE, NESSA _____ QUERIDA
Uma função aleatória poderia escolher a frase e trocar uma ou outra palavra pela listbox