Textos categorizados 'captcha'

Simple Captcha (versão 1.2)

O Simple Captcha foi uma idéia por acaso, depois uma experiência, depois virou artigo deste blog e deu o que falar! :)

Algumas pessoas baixaram, fuçaram e usaram, algumas tiveram problemas na instalação, outras experimentaram mas não sabemos o que resultou. Fica aqui antes de mais nada o meu agradecimento pela participação (e colaboração) de todos.

E agora acaba de sair do forno uma versão quentinha com direito à manual de instruções e tudo mais. E atendendo à pedidos agora é possível enviar o bendito e-mail após validação do código da imagem.

Veja a relação de novidades desta versão:

    + revisão geral do código na versão PHP;
    + inclusão do manual de instruções;
    + aumento na dificuldade de leitura das imagens;
    + adicionado link para atualizar a imagem do código
    + inclusão da programação de envio do e-mail nas duas versões*;
    + melhorados os comentários nas duas versões (PHP e ASP);

Nunca pensei que versionaria um recurso de captcha. Então, tá esperando o que?

Dúvidas, críticas, reclamações, sugestões, contar como foi? Deixe seu comentário. Ah, também estou aceitando sugestões de como melhorar o Simple Captcha, e sobre novos recursos que eu poderia publicar aqui no blog.

 

Licença Creative Commons
Recurso de Captcha para formulários na web por Simple Captcha é licenciado por Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.

Como criar um CAPTCHA (para ASP e PHP)

Atualizado em 19 de Agosto de 2008
A pedidos, o Simple Captcha tem agora nova versão, a 1.2. Dentre as novidades, agora as imagens estão mais difíceis de decifrar e o formulário permite envio de e-mail! BAIXE AGORA MESMO NO LINK DESTE POST.

Atualizado em 28 de Maio de 2008
Pronto, a versão do CAPTCHA em PHP está criada e testada, usem e abusem. O link está no final deste post na seção “Downloads”. Lembrem-se de deixar algum comentário sobre a experiência com quaisquer versões que usarem. :P

 

Atenção: POST TÉCNICO
Se você não trabalha com desenvolvimento este post não será entendido por você.

Se você já fez um cadastro na internet concerteza já teve que preencher um código composto por uma mistura de letras e números embaralhados bem chato de ler, como este:

Pois bem, isto se chama CAPTCHA. Muitos formulários na internet hoje em dia são preenchidos por computadores spammerspessoas que ”extremamente ocupadas” elaboram um mecanismo para, por exemplo, preencher o seu formulário de contato de forma descontrolada com propagandas e outras porcarias, e tudo é feito automaticamente. Se o formulário inserir dados em um banco de dados, então têm-se um banco ocupando espaço com lixo, ou até pior: vírus. E é incrível como esse tipo de coisa acontece com frequência. Se eu disponibilizar um form na internet que remete para meu e-mail, pronto! é questão de minutos pra uma enxurrada de tranqueira chegar na minha caixa de entrada. 

O CAPTCHA praticamente não permite que esse problema aconteça, dependendo da complexidade do código ou da forma como ele é implementado, os spammers são capazes de burlá-los rapidinho.

Bom, em resumo, eu pensei esses dias: por que não criar o meu próprio CAPTCHA? Algo simples, pra que a idéia seja entendida. Eu estava lendo o post “CAPTCHA de pobre” do Aurélio há um tempo atrás, e decidi fazer o meu baseado no modelo do dele, que segundo ele mesmo, foi a maneira que realmente barrou os spams após várias insistentes tentativas. Se ainda te restam dúvidas sobre o que é spam, vamos à própria definição do Aurélio:

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.
 

1º Passo: o que não pode ter num CAPTCHA

Vou explicar usando a versão para ASP, mas em PHP o esquema é o mesmo.

Para que um CAPTCHA seja realmente eficiente, em primeiro lugar deve-se pensar o que NÃO pode ter nele. E a primeira coisa é: o código que a imagem mostra embutido no código-fonte!

Em hipótese alguma pense em colocar o código/palavra/número que a imagem está mostrando em seu código como por exemplo num campo de texto tipo “hidden”. Isso é facilmente encontrado pelos programas de spam.

A segunda coisa é uma imagem mostrando algo completamente dedutível e fácil de ler como: “111″, “222″ ou mesmo: “ABC” ou “OI”, “VOCE”, etc. Spammers também lêem o que tem na tela.

Ainda segundo o próprio Aurélio, cores ou números digitados na tela para serem ”colados” no campo de texto também não funcionam.

2º Passo: elaborando como vai ser o código da imagem

Números. Este CAPTCHA que estamos elaborando não tem a garantia de ser completamente seguro, mas vamos seguir (a nível de experiência) o modelo que deu certo para o Aurélio (os quatro números completamente sem ordem lógica ou significado para estranhos) como os últimos dígitos do meu antigo celular, ou da casa em que morei, ou parte do meu RG e CPF.

Eu criei 20 imagens:

imagens para o CAPTCHA

3º Passo: o esquema

Criei um diretório imagens na raiz do meu site, e joguei todas as imagens acima lá. Para facilitar, as imagens têm nomes simples como: 1.jpg, 2.jpg, 3.jpg…

Cria-se então uma página chamada “captcha.asp”,  que ficará um nível acima do diretório imagens. A “captcha.asp” vai chamar as imagens de “imagens”, entendeu né?

Agora dentro de captcha.asp cria-se em primeiro lugar o formulário, ele vai submeter para a própria página “captcha.asp” neste exemplo só para facilitar:

<!– até aqui tudo ok, um formulário submetendo para a mesma página –>
<form action=”captcha.asp” method=”post”>
<label for=”codigo”>Digite o código ao lado:</label>
<!– o campo que receberá o código –>
<input type=”text” name=”codigo” size=”4″ maxlength=”4″ />
<!– aqui estou chamando as imagens dinamicamente, na função ASP de logo mais adiante –>
<img src=”imagens/<%= nome_imagem_gerada %>.jpg” alt=”">
<br/>
<!– um campo oculto que precisarei para informar ao ASP qual o nome da imagem gerada –>
<input type=”hidden” value=”<%= nome_imagem_gerada %>” name=”imagem” />
<!– um campo oculto que me dirá se o form está sendo submetido ou nao, já que está na mesma página–>
<input type=”hidden” value=”sim” name=”enviando” />
<input type=”submit” value=”enviar” />

Logo acima do formulário, implementei o seguinte código ASP:

<%
‘aqui eu verifico se o caso é: o form está sendo enviado
if request.form(“enviando”) = “sim” then
 ’se está sendo enviado, eu apanho o código que o usuário inseriu e o nome da imagem que foi gerada lá no form.
 codigo = request.form(“codigo”)
 imagem = request.form(“imagem”)
 
 ’um case verifica se a imagem foi 1.jpg, então ela tem o código “0266″, se foi 2.jpg então o código dela é “9032″ e assim por diante…

 select case imagem

 case 1
 cod = “0266″
 case 2
 cod = “9032″
 case 3
 cod = “5610″
 case 4
 cod = “1277″
 case 5
 cod = “0501″
 case 6
 cod = “7090″
 case 7
 cod = “2111″
 case 8
 cod = “9831″
 case 9
 cod = “0003″
 case 10
 cod = “1012″
 case 11
 cod = “5123″
 case 12
 cod = “2299″
 case 13
 cod = “6974″
 case 14
 cod = “4415″
 case 15
 cod = “7618″
 case 16
 cod = “8870″
 case 17
 cod = “1610″
 case 18
 cod = “0102″
 case 19
 cod = “6048″
 case 20
 cod = “5599″

 end select

‘ se o código digitado pelo usuário bater com os códigos que defini para cada imagem… voilá!
 if cod = codigo then
  response.write “<span style=’color:green’>Parabéns! Código correto.</span>”
 else
‘ se o código digitado pelo usuário NÃO bater com os códigos que defini para cada imagem… Código errado!
 response.write “<span style=’color:red’>Ops! Código incorreto.</span>”
 end if
 response.write “<br/><input type=’submit’ value=’voltar’ onclick=’javascript:history.back();’ />”
 response.end

‘ se o form não estiver sendo enviado, então a função “randomiza()” gera números randômicos de 1 a 20 e o número que for a bola da vez vai virar nome de uma imagem, tipo:  numero.jpg
else

 function randomiza()
 dim RndTemp
 Randomize
 RndTemp = Rnd * 19 + 1
 RndTemp= Int(RndTemp)
 randomiza = RndTemp
 end function

 nome_imagem_gerada = randomiza()

end if
%>

4ª Passo:  o desafio

Desafio você a testar a eficiência deste CAPTCHA em seu site/blog. Por que não experimenta em seu formulário de contato por exemplo? Observe bem sua caixa de entrada ou lixeira, está entrando spams ou o troço foi eficiente?

Conte-me aqui os resultados.

easycalendar

 

Observações

1. Quanto mais você proteger o diretório imagens melhor para não ter suas imagens rastreadas por programas ou indivíduos maliciosos.

2. É importante tentar criptografar partes do seu código, principalmente os que se referem aos nomes das imagens.

Download

Este post ficou enorme, mas foi preciso, então se você quiser a coisa toda mastigada fique à vontade para baixar o pacote completo do mais novo “Simple Captcha”:

Você usou? gostou? tem dúvidas, críticas, reclamações, sugestões? Deixe seu comentário neste post.


Henrique Eduardo Araujo

Twitter

  • O bom de perder todos os dados do seu computador com aquela resetada acidental é que a assinatura de 6 meses do Anti-virus vale por mais 6! 1 day ago

Categorias

Leituras Importantes:

Dias p/ o Aniversário do Blog

Aniversário deste blog

Catraca

  • 26,566 visitantes
Licença Creative Commons