Codigos Captcha são uma tecnica de proteção anti-span existente em varios sites da internet e até hoje é o método mais eficiente.
exemplo de códigos captcha
A técnica altamente difundida consiste em gerar uma imagem aleatória (não são caracteres digitados, sim uma imagem), com letras e/ou números e distorce-los.
Mas para que?
Ao vizualizarmos um código captcha facilmente (ou nem sempre tão facilmente) conseguimos definir o que está escrito, o que não acontece com um computador, um software não tem a capacidade de olhar e identificar a letra visualmente pois a mesma trata-se de uma imagem e não um texto digitado com caracteres.
O Captcha é totalmente seguro?
Como qualquer sistema de segurança existem modos de burla-lo, alguns hackers conseguem criar ferramentas capazes de ver e identifica o código Captcha - leia mais aqui
O que na verdade ainda não é tão facil o que ainda torna o Captcha um sistema muito confiável.
Vamos deixar de papo furado e começar logo.
Irei explicar neste tutorial um método interessante de criar um codigo captcha, pois devemos atentar-nos aos seguintes tópicos.
- Não pode haver em hipótese nenhuma o valor do código em algum lugar do código fonte do site, pois o mesmo facilmente será identificado.
- Não podemos utilizar imagens que levem o nome de seus respectivos números ou letras.
- Devemos ter um fundo com traços ou cores para confundir um software
O código abaixo tem como função gerar uma imagem captcha com varios caracteres, o melhor tudo é feito na programação não há nenhuma imagem salva.
Preste atenção nos comentários eles irão te ajudar
img.asp
<%
'Função para gerar as letras
Function Gerar_letras(quantidade)
'Declaramos o Array que armazenará o total de caractéres utilizados, letras, números, sinais, etc.
'No nosso caso, 61 sendo, 26 letras maiúsculas, 26 minúsculas e 10 números (0 - 9)
Dim Senha(61)
'Declaramos os arrays usados e seus valores
Senha(0) = "a"
Senha(1) = "b"
Senha(2) = "c"
Senha(3) = "d"
Senha(4) = "e"
Senha(5) = "f"
Senha(6) = "g"
Senha(7) = "h"
Senha(8) = "i"
Senha(9) = "j"
Senha(10) = "k"
Senha(11) = "l"
Senha(12) = "m"
Senha(13) = "n"
Senha(14) = "o"
Senha(15) = "p"
Senha(16) = "q"
Senha(17) = "r"
Senha(18) = "s"
Senha(19) = "t"
Senha(20) = "u"
Senha(21) = "v"
Senha(22) = "w"
Senha(23) = "x"
Senha(24) = "y"
Senha(25) = "z"
Senha(26) = "0"
Senha(27) = "1"
Senha(28) = "2"
Senha(29) = "3"
Senha(30) = "4"
Senha(31) = "5"
Senha(32) = "6"
Senha(33) = "7"
Senha(34) = "8"
Senha(35) = "9"
Senha(36) = "A"
Senha(37) = "B"
Senha(38) = "C"
Senha(39) = "D"
Senha(40) = "E"
Senha(41) = "F"
Senha(42) = "G"
Senha(43) = "H"
Senha(44) = "I"
Senha(45) = "J"
Senha(46) = "K"
Senha(47) = "L"
Senha(48) = "M"
Senha(49) = "N"
Senha(50) = "O"
Senha(51) = "P"
Senha(52) = "Q"
Senha(53) = "R"
Senha(54) = "S"
Senha(55) = "T"
Senha(56) = "U"
Senha(57) = "V"
Senha(58) = "W"
Senha(59) = "X"
Senha(60) = "Y"
Senha(61) = "Z"
Randomize
'Contamos a quantidade de letras geradas
do while len(chave) < quantidade
num = Senha(Int(61 * Rnd ))
chave = chave + num
loop
Gerar_letras = chave
end function
'Aqui chamamos a função e armazenamos o resultado da mesma em uma sessão.
'Troque o 6 pela quantidade de caracteres que deseja sortear.
Session("Senha") = Gerar_letras(6)
'Cria o objeto Jpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")
'Imagem usada como fundo no caso mandei um JPG qualquer com o nome de imagem
Path = Server.MapPath("imagem.jpg")
'Abre a imagem existente
Jpeg.Open Path
'Salva a imagem. Aqui foi usada a pasta teste, que obrigatoriamente deve ter permissão de escrita.
'Altere-a pela pasta onde será salva a imagem.
'LEMBRE-SE A PASTA DEVERÁ TER PERMISSÃO DE ESCRITA
Jpeg.Save Server.MapPath("captcha.jpg")
'Define altura e largura da imagem.
Jpeg.Width = 200
Jpeg.Height = 40
'Define cor, fonte, tamanho e tipo de qualidade do texto
Jpeg.Canvas.Font.Color = &H800000
Jpeg.Canvas.Font.Family = "Verdana"
Jpeg.Canvas.Font.Size = "36"
Jpeg.Canvas.Font.Bold = True
Jpeg.Canvas.Font.Quality = 4
'Desenha as bordas da imagem.
Jpeg.Canvas.Pen.Color = &H800000
Jpeg.Canvas.Pen.Width = 1
Jpeg.Canvas.Brush.Solid = False
Jpeg.Canvas.DrawBar 1, 1, Jpeg.Width, Jpeg.Height
Jpeg.Canvas.PrintText 30, 0, "" & Session("Senha") & ""
'Envia a imagem para o navegador.
Jpeg.SendBinary
'Remove a instância do objeto da memória
Set Jpeg = Nothing
%>
'Função para gerar as letras
Function Gerar_letras(quantidade)
'Declaramos o Array que armazenará o total de caractéres utilizados, letras, números, sinais, etc.
'No nosso caso, 61 sendo, 26 letras maiúsculas, 26 minúsculas e 10 números (0 - 9)
Dim Senha(61)
'Declaramos os arrays usados e seus valores
Senha(0) = "a"
Senha(1) = "b"
Senha(2) = "c"
Senha(3) = "d"
Senha(4) = "e"
Senha(5) = "f"
Senha(6) = "g"
Senha(7) = "h"
Senha(8) = "i"
Senha(9) = "j"
Senha(10) = "k"
Senha(11) = "l"
Senha(12) = "m"
Senha(13) = "n"
Senha(14) = "o"
Senha(15) = "p"
Senha(16) = "q"
Senha(17) = "r"
Senha(18) = "s"
Senha(19) = "t"
Senha(20) = "u"
Senha(21) = "v"
Senha(22) = "w"
Senha(23) = "x"
Senha(24) = "y"
Senha(25) = "z"
Senha(26) = "0"
Senha(27) = "1"
Senha(28) = "2"
Senha(29) = "3"
Senha(30) = "4"
Senha(31) = "5"
Senha(32) = "6"
Senha(33) = "7"
Senha(34) = "8"
Senha(35) = "9"
Senha(36) = "A"
Senha(37) = "B"
Senha(38) = "C"
Senha(39) = "D"
Senha(40) = "E"
Senha(41) = "F"
Senha(42) = "G"
Senha(43) = "H"
Senha(44) = "I"
Senha(45) = "J"
Senha(46) = "K"
Senha(47) = "L"
Senha(48) = "M"
Senha(49) = "N"
Senha(50) = "O"
Senha(51) = "P"
Senha(52) = "Q"
Senha(53) = "R"
Senha(54) = "S"
Senha(55) = "T"
Senha(56) = "U"
Senha(57) = "V"
Senha(58) = "W"
Senha(59) = "X"
Senha(60) = "Y"
Senha(61) = "Z"
Randomize
'Contamos a quantidade de letras geradas
do while len(chave) < quantidade
num = Senha(Int(61 * Rnd ))
chave = chave + num
loop
Gerar_letras = chave
end function
'Aqui chamamos a função e armazenamos o resultado da mesma em uma sessão.
'Troque o 6 pela quantidade de caracteres que deseja sortear.
Session("Senha") = Gerar_letras(6)
'Cria o objeto Jpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")
'Imagem usada como fundo no caso mandei um JPG qualquer com o nome de imagem
Path = Server.MapPath("imagem.jpg")
'Abre a imagem existente
Jpeg.Open Path
'Salva a imagem. Aqui foi usada a pasta teste, que obrigatoriamente deve ter permissão de escrita.
'Altere-a pela pasta onde será salva a imagem.
'LEMBRE-SE A PASTA DEVERÁ TER PERMISSÃO DE ESCRITA
Jpeg.Save Server.MapPath("captcha.jpg")
'Define altura e largura da imagem.
Jpeg.Width = 200
Jpeg.Height = 40
'Define cor, fonte, tamanho e tipo de qualidade do texto
Jpeg.Canvas.Font.Color = &H800000
Jpeg.Canvas.Font.Family = "Verdana"
Jpeg.Canvas.Font.Size = "36"
Jpeg.Canvas.Font.Bold = True
Jpeg.Canvas.Font.Quality = 4
'Desenha as bordas da imagem.
Jpeg.Canvas.Pen.Color = &H800000
Jpeg.Canvas.Pen.Width = 1
Jpeg.Canvas.Brush.Solid = False
Jpeg.Canvas.DrawBar 1, 1, Jpeg.Width, Jpeg.Height
Jpeg.Canvas.PrintText 30, 0, "" & Session("Senha") & ""
'Envia a imagem para o navegador.
Jpeg.SendBinary
'Remove a instância do objeto da memória
Set Jpeg = Nothing
%>
OBS: O script acima irá gerar uma imagem (binários), portanto não pode conter código HTML junto.
Agora vamos ver como fica o formulário que vai exibir a imagem gerada no script anterior e autenticar os caracteres, vamos chamálo de validar.asp
validar.asp
<%
' Verifica se o valor digitado no campo do formulário é o mesmo que gerou a imagem no script img.asp
if request.ServerVariables("REQUEST_METHOD") = "POST" then
if Request.Form("txt_key") = Session("Senha") then
Response.Write "Formulário confirmado!"
else
Response.Write "Preencha o campo com os caracteres da imagem!"
end if
end if
%>
<form action="" method="post" name="form1">
<input id="txt_key" name="txt_key" size="10" type="text" />
<input name="Submit" type="submit" value="Enviar" />
<img src="img.asp" /></form>
Valeu galera espero que vcs curtam
Nenhum comentário:
Postar um comentário