Captcha ASP (Proteger formulário de spams)

Uma forma bem fácil de evitar que scripts maliciosos utilizem seus formulários para envio de SPAM é criar uma imagem de forma dinâmica com caracteres que serão validados antes do formulário enviar o e-mail.

Obs: Primeiramente seu provedor deverá ter suporte ao componente ASPJPEG.

Vamos criar um arquivo ASP chamado img.asp ondeo mesmo irá apenas para validar os caracteres. Veja o código abaixo:


img.asp


<%
'Função para gerar conjunto de letras aleatórias
Function aleatorio(quantidade)
  numero = array("A","B","C","D","E","F","G","H","I", "J","K","L","M","N","O","P","Q","R","S","T","U","V", "W","X","Y","Z","a","b","c","d","e","f","g", "h","i","j","k","l","m","n","o","p","q","r", "s","t","u","v","w","x","y","z","1","2","3" ,"4","5","6","7","8","9","0")
  Randomize
  do while len(senha) < quantidade
    num = numero(Int(ubound(numero) * Rnd ))
    senha = senha + num
  loop
  aleatorio = Trim(senha)
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") = aleatorio(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("imagemFundo.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 name="form1" method="post" action="">
  <input name="txt_key" type="text" id="txt_key" size="10">
  <input type="submit" name="Submit" value="Enviar">
  <br />
  <img src="img.asp">
</form>


Posted by Programador PHP

Nenhum comentário:

Postar um comentário