Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Silas Martins

Captcha ASP, melhor metodo para previnir spamm

Recommended Posts

Esse método que vou usar aqui é bem simples e muito funcional.

 

A idéia do é proteger seu form de forma que spamers não o utlilize para envio de spam.

 

OBS: para esse código aqui funcione seu host ele tem que ter suporte para ASPJPEG

 

<%

   '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

   %>
[code] como esse código acima ira criar uma imagem (binaria) o mesmo não pode haver HTML.
[b] Formulário[/b]

[code]
<%

' Verifica se o valor digitado no campo do formulário é o mesmo que gerou a imagem no script img.asp

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

%>

<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>

 

Pronto seu formulário agora está seguro e livre de spamm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ted k', se você não entendeu, lá vai... pelo que entendi, ele é o autor do script postado e está agradecendo o Salgado por postar a fonte. hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos melhorar a função para gerar o conjunto de letras:

 

img.asp

CODE
<%

'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

%>

validar.asp

CODE
<%

' Verifica se o cara postou alguma coisa

if request.ServerVariables("REQUEST_METHOD") = "POST" then

' Verifica se o valor digitado no campo do formulário é o mesmo que gerou a imagem no script img.asp

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>

abs

 

http://programacaophpasp.blogspot.com/

Compartilhar este post


Link para o post
Compartilhar em outros sites

só pra brincar, fiz umas alterações na sua img.asp

 

<%
Function aleatorio(q)
	'Função para gerar conjunto de caracteres aleatórios
	dim a, i, s
	for i = 65 to 90: a = a & chr(i) & " ": next: a = a & lcase(a) & "1 2 3 4 5 6 7 8 9 0": a = split(a)
	randomize
	while q > 0
		s = s & a( int(ubound(a) * rnd) ): q = q - 1
	wend
	aleatorio = s
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)
'Response.write aleatorio(6)
'Response.End

'Cria o objeto Jpeg
dim oJpeg, sPath
Set oJpeg = Server.CreateObject("Persits.Jpeg")
	'Imagem usada como fundo no caso mandei um JPG qualquer com o nome de imagem
	sPath = Server.MapPath("imagemFundo.jpg")
	'Abre a imagem existente
	oJpeg.Open sPath
	'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.
	oJpeg.Save Server.MapPath("captcha.jpg")
	'Define altura e largura da imagem.
	oJpeg.Width	= 200
	oJpeg.Height = 40
	with oJpeg.Canvas
	'Define cor, fonte, tamanho e tipo de qualidade do texto
		.Font.Color = &H800000
		.Font.Family = "Verdana"
		.Font.Size = "36"
		.Font.Bold = True
		.Font.Quality = 4
		'Desenha as bordas da imagem.
		.Pen.Color = &H800000
		.Pen.Width = 1
		.Brush.Solid = False
		.DrawBar 1, 1, oJpeg.Width, oJpeg.Height
		.PrintText 30, 0, "" & Session("Senha") & ""
	end with
	'Envia a imagem para o navegador.
	oJpeg.SendBinary
	'Remove a instância do objeto da memória
Set oJpeg = Nothing
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

bacana, está de parabéns! =P

 

em cima do código do Guto brinquei um pouquinho tb na função aleatorio!!

 

CODE
<%

Function aleatorio(q)

'Função para gerar conjunto de caracteres aleatórios

dim a, i, s

for i = 48 to 90 : if i < 58 or i > 64 then : a = a & chr(i) & " " : end if : next : a = split(lcase(a) & a)

randomize

for i = 1 to q : s = s & a( int(ubound(a) * rnd) ) : next

aleatorio = s

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)

'Response.write aleatorio(6)

 

'Cria o objeto Jpeg

dim oJpeg, sPath

Set oJpeg = Server.CreateObject("Persits.Jpeg")

'Imagem usada como fundo no caso mandei um JPG qualquer com o nome de imagem

sPath = Server.MapPath("imagemFundo.jpg")

'Abre a imagem existente

oJpeg.Open sPath

'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.

oJpeg.Save Server.MapPath("captcha.jpg")

'Define altura e largura da imagem.

oJpeg.Width = 200

oJpeg.Height = 40

with oJpeg.Canvas

'Define cor, fonte, tamanho e tipo de qualidade do texto

.Font.Color = &H800000

.Font.Family = "Verdana"

.Font.Size = "36"

.Font.Bold = True

.Font.Quality = 4

'Desenha as bordas da imagem.

.Pen.Color = &H800000

.Pen.Width = 1

.Brush.Solid = False

.DrawBar 1, 1, oJpeg.Width, oJpeg.Height

.PrintText 30, 0, "" & Session("Senha") & ""

end with

'Envia a imagem para o navegador.

oJpeg.SendBinary

'Remove a instância do objeto da memória

Set oJpeg = Nothing

%>

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa nao to conseguindo implementar nesse meu form

 

 

divulgueFesta.asp

<table border="0" cellpadding="0" cellspacing="0" align="center">
	  <form  action="divulgueFesta2.asp" method="post" >
	  <tr>
		<td></td>
	  </tr>
	  <tr>
		<td><label for="frmNome" style="float:left;width:140px;">Seu Nome</label>
		  <input type="text" name="frmNome" id="frmNome" value="" maxlength="16" style="width:150px;" />
		  <div style="clear:left;height:20px;"> </div>
		  <label for="frmEmail" style="float:left;width:140px;">Seu Email</label>
		  <input type="text" name="frmEmail" id="frmEmail" value="" maxlength="30" style="width:150px;" />
		  <div style="clear:left;height:20px;"> </div>
		  <label for="frmFone" style="float:left;width:140px;">Telefone </label>
		  <input type="text" name="frmFone" id="frmFone" value="" maxlength="9" style="width:150px;" />
		  <div style="clear:left;height:20px;"> </div>
		  <label for="frmNomeEvento" style="float:left;width:140px;">Nome do Evento</label>
		  <input type="text" name="frmNomeEvento" id="frmNomeEvento" maxlength="30" style="width:150px;" />
		  <div style="clear:left;height:20px;"> </div>
		  <label for="frmData" style="float:left;width:140px;">Data:</label>
		  <input type="text" name="frmData" id="frmData" maxlength="30" style="width:150px;" />
		  <div style="clear:left;height:20px;"> </div>
		  <label for="frmLugar" style="float:left;width:140px;">Local</label>
		  <input type="text" name="frmLugar" id="frmLugar" maxlength="100" style="width:200px;" />
		  <div style="clear:left;height:20px;"> </div>
		  <label for="frmHorario" style="float:left;width:140px;">Horario</label>
		  <input type="text" name="frmHorario" id="frmHorario" maxlength="20" style="width:160px;" />
		  <div style="clear:left;height:20px;"> </div>
		  <label for="frmDetalhes" style="float:left;width:140px;">Detalhes</label>
		  <textarea name="frmDetalhes" id="frmDetalhes" style="width:300px;height:140px;"></textarea>
		  <div style="clear:left;height:20px;"> </div></td>
	  </tr>

	  <tr>
		<td height="50">
<%
' Verifica se o cara postou alguma coisa
if request.ServerVariables("REQUEST_METHOD") = "POST" then
' Verifica se o valor digitado no campo do formulário é o mesmo que gerou a imagem no script img.asp
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
%><br />
	   <input name="txt_key" type="text" id="txt_key" size="10"><br /><img src="img.asp">

		
		</td>
	  </tr>
	  <tr>
		<td align="right">
		  <input type="submit" value="Enviar" />
		  <input type="reset" value="Limpar" /></td>
	  </tr>
	  </form>
	</table>

 

divulgueFesta2.asp

<%
wNome = request.form("frmNome")
wEmail = request.form("frmEmail")
wFone = request.form("frmFone")
wNomeEvento = request.form("frmNomeEvento")
wData = request.form("frmData")
wLugar= request.form("frmLugar")
wHorario= request.Form("frmHorario")
wDetalhes= request.form("frmDetalhes")

set mail = server.createobject("cdonts.newmail")
mail.from = "Contato Site <contato@contato.com.br>"
'Este email deve ser válido e existir como conta de email para o domínio
mail.to = "Revista Dominios <contato@contato.com.br>"
mail.subject = "Contato do Site - Divulgue sua festa"

mail.Body = "Name: " & wNome & vbCrLf & _
"Email: " & wEmail & vbCrLf & _
"Telefone: " & wFone & vbCrLf & _
"Nome do Evento: " & wNomeEvento & vbCrLf & _
"Data do Evento: " & wData & vbCrLf & _
"Lugar do Evento: " & wLugar & vbCrLf & _
"Horario: " & wHorario & vbCrLf & _
"Detalhes: " & vbCrLf & wDetalhes

mail.bodyformat = 1
mail.mailformat = 1
on error resume next
mail.send
if err <> 0 then
	response.write("<script>alert('Erro ao enviar email');location='default.asp?pagina=divulgueFesta'</script>") & err.description
end if
	response.write("<script>alert('Email enviado com sucesso!');location='default.asp'</script>")
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.