Tjena
Har på senare tid haft jätteproblem med spambottar på min hemsida, så idag gjorde jag ett skydde mot dessa.
Jag vill nu visa denna lösning för er och få lite feedback på hur den kan göras bättre.
Jag har använt en funktion som jag hittade här på wF för att slumpa fram stängar som är 10 tecken långa.
Dessa stängar skriver jag in på en bild som skapas av AspJpeg (www.persits.com).
När formuläret visas så sparas denna slumpade kod i ett hiddenfält och en session med samma värde skapas.
Användaren får fylla i koden som står på bilden i ett fält och vid postning jämförs koden i hiddenfältet, mot den man matat in i rutan.
Samtidigt jämförs den inmatade koden men den kod som sparas i en session på sidan innan.
Här är lite kod:
[i]verify.asp[/i]
<%
' // FUNKTION FÖR ATT SKAPA EN SLUMPMÄSSIG KOD:
Function getChar(ByVal iNoChars)
Dim sChars, strStr, i
Randomize(Timer())
sChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
sChars = sChars & "abcdefghijklmnopqrstuvwxyz"
sChars = sChars & "0123456789"
For i = 1 to iNoChars
strStr = strStr & Mid(sChars, Rnd * Len(sChars) + 1, 1)
Next
getChar = strStr
End Function
' // SKAPA EN KOD SOM ÄR 10 TECKEN LÅNG:
theCode = getChar(10)
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv">
<head>
<title>Asp Bildverifiering</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Language" content="sv" />
<meta http-equiv="expires" content="Mon, 1 Jul 2002 00:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="imagetoolbar" content="no" />
<!--
######################################
# BILDVERIFIERING MED ASPJPEG #
# SKRIVEN AV MICKE ANDERSSON 2006 #
# [url]http://www.mickea.com[/url] #
######################################
//-->
</head>
<body>
<img src="createKey.asp?theKey=<%=theCode%>" alt="" /><br /><br />
<form action="" method="post">
<input type="hidden" name="theCode1" value="<%=theCode%>" />
<input type="text" name="theCode2" value="" />
<input type="button" value="Kontrollera" onclick="if(this.form.theCode1.value==this.form.theCode2.value){ alert('Rätt!\n');}else{alert('Fel!\n');}" />
</body>
</html>
Och själv filen som skapar bilder binärt:
[i]createKey.asp[/i]
<%
' // TA EMOT SLUMPAD KOD FRÅN FORMULÄRSIDAN SOM EN QUERYSTRING:
theCode = Trim(Request.Querystring("theKey"))
' // SKAPA ETT OBJEKT AV ASPJPEG:
Set Jpeg = Server.CreateObject("Persits.Jpeg")
' // SKAPA EN NY BILD, BREDD, HÖJD, BAKGRUNDSFÄRG:
Jpeg.New 195, 30, &HFFFFFF
' // RITA EN BORDER RUNT BILDEN:
Jpeg.Canvas.Pen.Color = &H000080 ' Blue
Jpeg.Canvas.Brush.Solid = False ' to avoid solid bar
Jpeg.Canvas.DrawBar 0, 0, Jpeg.Width, Jpeg.Height
' // FORMATERA TYPSNITT; FÄRG:
Jpeg.Canvas.Font.Color = &H000000
Jpeg.Canvas.Font.Family = "Terminal"
Jpeg.Canvas.Font.Bold = True
Jpeg.Canvas.Font.Size = 24
Jpeg.Canvas.Font.Quality = 4
Jpeg.Canvas.Font.BkMode = "Opaque"
' // SKRIVA DEN SLUMPADE KODEN I BILDEN:
Jpeg.Canvas.PrintText 5, 5, theCode
' // SKICKA BILDEN TILL WEBBLÄSAREN BINÄRT:
Jpeg.SendBinary
%>
Så, är det här en bra lösning?
Har suttit och funderat på olika lösningar, men det här ser snyggt ut, det är inte allt för jobbigt för besökaren och jag tror att jag kommer få bort en hel del spam från min sida.
Det finns ett demo här på min sajt:
http://www.mickea.com/?mP=fileArea&fType=1
Och filerna i dess helhet finns att ladda hem här:
http://www.mickea.com/?mP=fileArea&fId=14
Alla tips, förslag osv. tas emot så jag kan göra det här så säkert som möjligt.
Tack på förhand!