webForumDet fria alternativet

Spamskydd med verifieringsnyckel

ASP

57 svar · 6 929 visningar · startad av MickeA.com · sida 3 av 3

Frågan, av MickeA.com

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

Läs frågan i sin helhet →
Medlem sedan feb. 20034 441 inlägg
#41

emission skrev:

MD5-hashningen tillför ingenting till varken funktion eller säkerhet (såvida man inte har en hackad webbserver, och då är man illa ute ändå), så jag tycker verkligen att den biten bör tas bort. Den förvirrar och tar onödig processorkraft!

Nej, jag vet, vi har diskuterat det tidigare i tråden...

Troxy skrev:

Rätta mig om jag har fel, men: om man inte har tillgång till ASPJpeg, borde man inte istället kunna göra någon enklare kontroll på att det är en människa? Exempelvis en fråga i stil med "Vad är det för dag imorgon?" typ?

Jo, visst går det.
Problemet är att dagens bottar har lärt sig gå runt sånna "spärrar".
Den första versionen av mina filer, där jag sparade koden i ett hiddenfält och ingen session, funkade inte bra alls.
Där fortsatte spammet utan några problem.

Medlem sedan apr. 200122 inlägg
#42

MickeA.com skrev:

Hejhej
Det här känns som the never ending story, men har vi kommit såhär långt tänker jag inte ge upp förrän det funkar...
Ditt felmeddelande beror med all säkerhet att filen "MD5_crypt.asp" inte kunde hittas.
Kolla så att du verkligen inkulderar filen och att den ligger högst upp i alla aspfiler som använder funktionen.
Du måste alltså även inkludera filen i filer som lägger till / visar inlägg i din gästbok.
Inkludera filen, testa igen och återkom!

Ahaa.... den biten hade jag ju missat :-)

nu står det

Sessionens värde: a848c774f9767000ed1bf25fac6f1106
Mitt inmatade värde: a848c774f9767000ed1bf25fac6f1106

:-)

var det här en koll så att det funkar? Ska de raderna bort nu?

Medlem sedan feb. 20034 441 inlägg
#43

Siluett skrev:

var det här en koll så att det funkar? Ska de raderna bort nu?

Precis, nu är vi på rätt väg ;)
Nu kan du ta bort de tre raderna och göra kontrollen istället.
Testa med det här:

If Request.Querystring("add") = "do" Then
     If Session("keyCode") <> MD5(Trim(Request.Form("keyCode"))) Then
          Response.Write("Fel kod")
     Else
          Response.Write("Rätt kod, det funkar!")
     End If
     Response.End
Else
 ' Formuläret...
End If

Om den visar "Rätt kod, det funkar!", så är det bara att ta bort "Response.End", sen lägger du in koden för att spara de inmatade uppgifterna i databasen.

Lycka till!

Medlem sedan dec. 19996 721 inlägg
#44

MickeA.com skrev:

Nej, jag vet, vi har diskuterat det tidigare i tråden...

Inte direkt diskuterat, väl?

Medlem sedan feb. 20034 441 inlägg
#45

emission skrev:

Inte direkt diskuterat, väl?

Nej, det är väl sant.
Vi kanske inte har gått in djupare på det, men det är nämt tidigare att det inte fyller någon funktion att köra det krypterat.

Anledningen att det är såhär beror mer på slöhet från min sida. Till en början använde jag inte alls sessioner, utan sparade koden som ett hiddenfält i formuläret, där jag krypterade koden.
När det sedan visade sig att skyddet inte alls funkade, så tog jag helt enkelt bort hiddenfältet och ersatte det med en session.

Jag gjorde inga andra ändringar i filerna, därför finns krypteringen kvar.
Vill man inte använda den, behöver man inte.
Sen tror jag inte att det påverkar prestandan så mycket att det försvårar för besökaren, eller ökar laddningstiden etc.

Men jag klistrar in alla kod igen, utan kryptering, så kan man välja vilken "version" man vill använda.

[i]createKey.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)

' // SKAPA EN SESSION OCH SPARA KODEN I DENNA UTAN KRYPTERING:
Session("keyCode") = theCode
Session.TimeOut = 3

' // 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 (BILDEN SPARAS INTE NÅGONSTANS):
Jpeg.SendBinary
%>
--------------------------------------------------------------------------------------

[i]Formuläret[/i]
<!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" />
	
	<meta name="author" content="Micke Andersson, Andersson Web &amp; Support (http://www.mickea.com)" />
	<meta name="owner" content="Andersson Web &amp; Support" />
	<meta name="copyright" content="&copy; 2006 - 2007 AWS, Andersson Web &amp; Support" />
	<meta name="MSSmartTagsPreventParsing" content="true" />
	<meta name="robots" content="default,follow" />
	<meta name="revisit-after" content="30 days" />
	<meta name="distribution" content="global" />
<!--
######################################
#    BILDVERIFIERING MED ASPJPEG     #
#  SKRIVEN AV MICKE ANDERSSON 2006   #
#       [url]http://www.mickea.com[/url]        #
######################################
//-->
</head>
<body>
<%
If Trim(Request.Querystring("do")) = "post" Then
	keyCode = Trim(Request.Form("keyCode"))
	If keyCode <> Session("keyCode") Then
		Response.Write("<h1>Du har angett en felaktig verifieringsnyckel...</h1>" & VbCrLf)
	Else
		Response.Write("<h1>Du angav rätt verifieringsnyckel!</h1>" & VbCrLf)
	End If
	Session("keyCode") = ""
	Session.Abandon
Else
%>
<img src="createKey.asp" alt="" /><br /><br />
<form action="bildverifiering.asp?do=post" method="post">
<input type="text" name="keyCode" value="" />
<input type="button" value="Kontrollera" onclick="if(this.form.keyCode.value!=''){this.form.submit();}" />
<%
End If
%>
</body>
</html>

Sådärja!

;)

Medlem sedan apr. 200122 inlägg
#46

MickeA.com skrev:

Precis, nu är vi på rätt väg ;)
Nu kan du ta bort de tre raderna och göra kontrollen istället.
Testa med det här:

If Request.Querystring("add") = "do" Then
     If Session("keyCode") <> MD5(Trim(Request.Form("keyCode"))) Then
          Response.Write("Fel kod")
     Else
          Response.Write("Rätt kod, det funkar!")
     End If
     Response.End
Else
 ' Formuläret...
End If

Om den visar "Rätt kod, det funkar!", så är det bara att ta bort "Response.End", sen lägger du in koden för att spara de inmatade uppgifterna i databasen.

Lycka till!

Jaa du..... det fungerar som det ska ända tills jag tar bort repsonse.end för då går det återigen att skriva inlägg oberoende av vad man skriver som lösenord!

If Request.Querystring("do")= "add" Then

' POSTA FORMULÄRET, JÄMFÖR DEN HEMLIGA KODEN OCH SPARA:
     If Session("keyCode") <> MD5(Trim(Request.Form("keyCode"))) Then
          Response.Write("Fel kod")
     Else
	  Response.Write("Rätt kod")
	End If

	Namn       = Request.Form("namn")
	Mail          = Request.Form("mail")
	Msg	        = Fixa(Request.Form("msg"))
	Ip   	  = Request.Servervariables("REMOTE_ADDR")
	Url   	  = Request.Form("url")
	If Url <> "" Then
		If Left(Url,7) = "http://" Then
			Url = Url
		Else
			Url = "http://" & Url
		End If
	End If
   Conn.Execute("Insert Into message(namn, mail, url, msg,ip) Values('"& namn &"','"& mail &"','"& url &"','"& msg &"','"& Ip &"')")
   Response.Redirect "aktuellt.asp"
	
Else
%>
<!-- VISA FORMULÄR //-->
<H1>MEDDELANDE</H1>
<form method="post" action="message.asp?do=add" name="message"  onSubmit="return Gb()">
<b>Namn:</b><br><input type="text" name="namn" size="20" class="form">
<b>E-mail:</b> <br><input type="text" name="mail" size="20" class="form">
<b>Hemsida:</b> <br><input type="text" name="url" size="20" class="form">
<b>Meddelande:</b><br><textarea name="msg" cols="16" rows="3" class="form"></textarea>
<img src="createKey.asp" alt="password" /><br /><br />
Ange lösenordet ovan för att kunna posta ditt inlägg
<input type="text" name="keyCode" value="" />
<input type="submit" value="Posta inlägg" class="form" onclick="if(this.form.keyCode.value!=''){this.form.submit();}" /></form>
<%

' VISA RESTEN AV INLÄGGEN:
	Set Recset = Server.CreateObject("ADODB.Recordset")

	Sidan = Request.QueryString("next")
	If Sidan = "" then 
		sida = 1 
	Else 
		sida = Sidan 
	End If 

	With RecSet
		.CursorLocation = 3
		.CacheSize = InlaggPerSida
	End With

	SQL = "Select * From message Order By datum desc"
	RecSet.Open SQL, Conn

	If RecSet.EOF Then
%>
	<i>Inga meddelanden.</i>

<%
	Else
%>

<%
		With RecSet
			 .MoveFirst 
			 .PageSize = InlaggPerSida
			 .AbsolutePage = sida
		End With

		Sidor =  RecSet.PageCount
		If Sidor > 1 Then
%>

<%
		End If
		X = 0
		Do While Not RecSet.EOF And X < RecSet.PageSize%>
		<b><%=Recset("namn")%></b> <%If RecSet("url") <> "" Then%><a href="<%=RecSet("url")%>" target="_blank"><img src="bilder/homepg.gif" border="0" alt="<%=RecSet("url")%>"></a> <%End If%> <%If RecSet("mail") <> "" Then%><a href="mailto:<%=RecSet("mail")%>"><img src="bilder/email.gif" border="0" alt="<%=RecSet("mail")%>"></a><%End If%>
		<br><%=FormatDateTime(RecSet("datum"),2)%>
		<br><%=Link(RecSet("msg"))%>
		<br><img src="bilder/line.gif" width="150" border="0" height="1">

<%
		X = X + 1 
		Recset.MoveNext
		Loop
		If Sidor > 1 Then
%>

<%
			 For Sid = 1 To Sidor
				 If (Int(Sid)) = (Int(sida)) Then%><b><%=FixDigits(Sid,2)%></b><%Else%> <a href="message.asp?next=<%=Sid%>"><%=FixDigits(Sid,2)%></a> <%End If
			 Next
%>

<%
		End If
		Recset.Close
		Set Recset = Nothing
	End If

End If
Conn.Close
Set Conn=Nothing
%>

tilbaka på ruta ett...;-)

Medlem sedan feb. 20034 441 inlägg
#47

Nej, inte alls, du har bara missat en liten grej.

If Request.Querystring("do")= "add" Then

' POSTA FORMULÄRET, JÄMFÖR DEN HEMLIGA KODEN OCH SPARA:
     If Session("keyCode") <> MD5(Trim(Request.Form("keyCode"))) Then
          Response.Write("Fel kod")
     Else
	  Response.Write("Rätt kod")
	End If

	Namn       = Request.Form("namn")
	Mail          = Request.Form("mail")
	Msg	        = Fixa(Request.Form("msg"))
	Ip   	  = Request.Servervariables("REMOTE_ADDR")
	Url   	  = Request.Form("url")
	If Url <> "" Then
		If Left(Url,7) = "http://" Then
			Url = Url
		Else
			Url = "http://" & Url
		End If
	End If
        [b]Conn.Execute("Insert Into message(namn, mail, url, msg,ip) Values('"& namn &"','"& mail &"','"& url &"','"& msg &"','"& Ip &"')")
        Response.Redirect "aktuellt.asp"[/b]
	
Else
%>
<!-- VISA FORMULÄR //-->
<H1>MEDDELANDE</H1>
<form method="post" action="message.asp?do=add" name="message"  onSubmit="return Gb()">
<b>Namn:</b><br><input type="text" name="namn" size="20" class="form">
<b>E-mail:</b> <br><input type="text" name="mail" size="20" class="form">
<b>Hemsida:</b> <br><input type="text" name="url" size="20" class="form">
<b>Meddelande:</b><br><textarea name="msg" cols="16" rows="3" class="form"></textarea>
<img src="createKey.asp" alt="password" /><br /><br />
Ange lösenordet ovan för att kunna posta ditt inlägg
<input type="text" name="keyCode" value="" />
<input type="submit" value="Posta inlägg" class="form" onclick="if(this.form.keyCode.value!=''){this.form.submit();}" /></form>
<%

' VISA RESTEN AV INLÄGGEN:
	Set Recset = Server.CreateObject("ADODB.Recordset")

	Sidan = Request.QueryString("next")
	If Sidan = "" then 
		sida = 1 
	Else 
		sida = Sidan 
	End If 

	With RecSet
		.CursorLocation = 3
		.CacheSize = InlaggPerSida
	End With

	SQL = "Select * From message Order By datum desc"
	RecSet.Open SQL, Conn

	If RecSet.EOF Then
%>
	<i>Inga meddelanden.</i>

<%
	Else
%>

<%
		With RecSet
			 .MoveFirst 
			 .PageSize = InlaggPerSida
			 .AbsolutePage = sida
		End With

		Sidor =  RecSet.PageCount
		If Sidor > 1 Then
%>

<%
		End If
		X = 0
		Do While Not RecSet.EOF And X < RecSet.PageSize%>
		<b><%=Recset("namn")%></b> <%If RecSet("url") <> "" Then%><a href="<%=RecSet("url")%>" target="_blank"><img src="bilder/homepg.gif" border="0" alt="<%=RecSet("url")%>"></a> <%End If%> <%If RecSet("mail") <> "" Then%><a href="mailto:<%=RecSet("mail")%>"><img src="bilder/email.gif" border="0" alt="<%=RecSet("mail")%>"></a><%End If%>
		<br><%=FormatDateTime(RecSet("datum"),2)%>
		<br><%=Link(RecSet("msg"))%>
		<br><img src="bilder/line.gif" width="150" border="0" height="1">

<%
		X = X + 1 
		Recset.MoveNext
		Loop
		If Sidor > 1 Then
%>

<%
			 For Sid = 1 To Sidor
				 If (Int(Sid)) = (Int(sida)) Then%><b><%=FixDigits(Sid,2)%></b><%Else%> <a href="message.asp?next=<%=Sid%>"><%=FixDigits(Sid,2)%></a> <%End If
			 Next
%>

<%
		End If
		Recset.Close
		Set Recset = Nothing
	End If

End If
Conn.Close
Set Conn=Nothing
%>

Dom felstilta raderna ligger utanför ifsatsen, vilket i det här fallet borde inne bära att det sparas ett helt tomt inlägg, alternativt att det dyker upp ett felmeddelande.

Använd den här koden:

If Request.Querystring("do")= "add" Then

' POSTA FORMULÄRET, JÄMFÖR DEN HEMLIGA KODEN OCH SPARA:
     If Session("keyCode") <> MD5(Trim(Request.Form("keyCode"))) Then
          Response.Write("Fel kod")
     Else
	  Response.Write("Rätt kod")

	Namn       = Request.Form("namn")
	Mail          = Request.Form("mail")
	Msg	        = Fixa(Request.Form("msg"))
	Ip   	  = Request.Servervariables("REMOTE_ADDR")
	Url   	  = Request.Form("url")
	If Url <> "" Then
		If Left(Url,7) = "http://" Then
			Url = Url
		Else
			Url = "http://" & Url
		End If
        End If
        [b]Conn.Execute("Insert Into message(namn, mail, url, msg,ip) Values('"& namn &"','"& mail &"','"& url &"','"& msg &"','"& Ip &"')")
        Response.Redirect "aktuellt.asp"[/b]
     End If
   
	
Else
%>
<!-- VISA FORMULÄR //-->
<H1>MEDDELANDE</H1>
<form method="post" action="message.asp?do=add" name="message"  onSubmit="return Gb()">
<b>Namn:</b><br><input type="text" name="namn" size="20" class="form">
<b>E-mail:</b> <br><input type="text" name="mail" size="20" class="form">
<b>Hemsida:</b> <br><input type="text" name="url" size="20" class="form">
<b>Meddelande:</b><br><textarea name="msg" cols="16" rows="3" class="form"></textarea>
<img src="createKey.asp" alt="password" /><br /><br />
Ange lösenordet ovan för att kunna posta ditt inlägg
<input type="text" name="keyCode" value="" />
<input type="submit" value="Posta inlägg" class="form" onclick="if(this.form.keyCode.value!=''){this.form.submit();}" /></form>
<%

' VISA RESTEN AV INLÄGGEN:
	Set Recset = Server.CreateObject("ADODB.Recordset")

	Sidan = Request.QueryString("next")
	If Sidan = "" then 
		sida = 1 
	Else 
		sida = Sidan 
	End If 

	With RecSet
		.CursorLocation = 3
		.CacheSize = InlaggPerSida
	End With

	SQL = "Select * From message Order By datum desc"
	RecSet.Open SQL, Conn

	If RecSet.EOF Then
%>
	<i>Inga meddelanden.</i>

<%
	Else
%>

<%
		With RecSet
			 .MoveFirst 
			 .PageSize = InlaggPerSida
			 .AbsolutePage = sida
		End With

		Sidor =  RecSet.PageCount
		If Sidor > 1 Then
%>

<%
		End If
		X = 0
		Do While Not RecSet.EOF And X < RecSet.PageSize%>
		<b><%=Recset("namn")%></b> <%If RecSet("url") <> "" Then%><a href="<%=RecSet("url")%>" target="_blank"><img src="bilder/homepg.gif" border="0" alt="<%=RecSet("url")%>"></a> <%End If%> <%If RecSet("mail") <> "" Then%><a href="mailto:<%=RecSet("mail")%>"><img src="bilder/email.gif" border="0" alt="<%=RecSet("mail")%>"></a><%End If%>
		<br><%=FormatDateTime(RecSet("datum"),2)%>
		<br><%=Link(RecSet("msg"))%>
		<br><img src="bilder/line.gif" width="150" border="0" height="1">

<%
		X = X + 1 
		Recset.MoveNext
		Loop
		If Sidor > 1 Then
%>

<%
			 For Sid = 1 To Sidor
				 If (Int(Sid)) = (Int(sida)) Then%><b><%=FixDigits(Sid,2)%></b><%Else%> <a href="message.asp?next=<%=Sid%>"><%=FixDigits(Sid,2)%></a> <%End If
			 Next
%>

<%
		End If
		Recset.Close
		Set Recset = Nothing
	End If

End If
Conn.Close
Set Conn=Nothing
%>

Ser du skillnaden?
Det du lägger efter End If kommer att exekveras (koden kommer köras) oavsett vad resultatet i ifsatsen blir.
Du kan kopiera och klistra in "min kod" ovan och ersätta den med din egen.

Hade du lagt till "Response.End" direkt efter "Response.Write("rätt kod")", inuti ifsatsen direkt innan End If, hade din kod fungerat.

Testa igen och återkom!

Medlem sedan apr. 200122 inlägg
#48

JAA! Nu fingerar det!! Tjoho!
Stort tack för hjälpen!! :birp

Medlem sedan feb. 20034 441 inlägg
#49

Siluett skrev:

JAA! Nu fingerar det!! Tjoho!
Stort tack för hjälpen!! :birp

Va bra!
Jag sa ju att det inte var någon idé att ge upp förrän det funkade ;)

Medlem sedan feb. 20034 441 inlägg
#50

Hej igen
Nu har det dykt upp lite problem med mitt script.

Trots det här så dyker spam upp i en gästbok där jag integrerat spamskyddet.
Vad bör jag göra?

Testade med att öka på antalet tecken från 5 till 8, men dessa spambottar verkar kunna avläsa bilderna som skapas ändå.
Hur ska man göra om man vill skriva ut texten med nått ovanligt typsnitt?
På nått sätt måste man ju bifoga det till scriptet, men hur?

Alla idéer, tips och förslag välkomnas.

Tack!

Medlem sedan okt. 20041 556 inlägg
#51

Hur vet du att det är en robot? Det finns illvilliga människor också.... :)

Medlem sedan feb. 20034 441 inlägg
#52

Men det är "väl" inte troligt att en person sitter och gång på gång skriver skit, knappar in en 8-siffrig kod och sen postar?

Fler förslag?

Medlem sedan dec. 19996 721 inlägg
#53

Ett knepigt typsnitt och tillskruvade bokstäver är ett knep. En annan variant (som jag inte sett någonstans, men det borde funka fint) vore att slumpa 2 numeriska värden (gärna till två bilder) , som man ber besökaren att lägga ihop. Man kan slumpa räknesättet också.

Medlem sedan feb. 20034 441 inlägg
#54

Det är det här med knepigt typsnitt jag är ute efter, problemet är hur jag ska kunna bifoga det med scriptet.
Måste testa om det kan räcka med att lägga det i samma mapp som scriptet.

Det jag försöker med nu är att lägga dit cirklar och andra saker ovanpå texten, samt ha en bekgrundsfärg och en textfärg som inte skiljer sig så mycket.

Problemet man stöter på då är dock att texten _kan_ vara svår att se.

Medlem sedan juni 20006 022 inlägg
#55

Texten måste vara svår att se, annars kan robotarna läsa ut den.

Medlem sedan dec. 19996 721 inlägg
#56

Kom på en variant till... :)

Slumpa lite av färgerna på tecknen, och uppmana besökaren att t.ex. skriva in de röda tecknen. Eller något liknande, för våra färgblinda vänners skull.

Medlem sedan feb. 20034 441 inlägg
#57

Ja det kanske kan vara en variant.
Nu gjorde jag såhär:

theLenght	= Len(theCode)
theMarg		= 5
theRota		= 2
theTop		= 3
For j = 1 To theLenght
	Jpeg.Canvas.Font.Rotation = theRota
	Jpeg.Canvas.PrintText theMarg, theTop, Mid(theCode, j, 1)
	theMarg = theMarg + 20
	theRota = theRota + 8
	theTop	= theTop + 1
Next

Jpeg.Canvas.Pen.Width = 1
Jpeg.Canvas.Brush.Color = &H000000 ' Blue
Jpeg.Canvas.Brush.Solid = False ' to avoid solid bar
Jpeg.Canvas.DrawEllipse 0, -5, 100, 50
Jpeg.Canvas.DrawEllipse 10, -5, 110, 50
Jpeg.Canvas.DrawEllipse 20, -5, 120, 50
Jpeg.Canvas.DrawEllipse 30, -5, 130, 50
Jpeg.Canvas.DrawEllipse 40, -5, 140, 50
Jpeg.Canvas.DrawEllipse 50, -5, 150, 50
Jpeg.Canvas.DrawEllipse 60, -5, 160, 50
Jpeg.Canvas.DrawEllipse 70, -5, 170, 50
Jpeg.Canvas.DrawEllipse 80, -5, 180, 50
Jpeg.Canvas.DrawEllipse 90, -5, 190, 50
Jpeg.Canvas.DrawEllipse 100, -5, 200, 50
Jpeg.Canvas.DrawEllipse 110, -5, 210, 50
Jpeg.Canvas.DrawEllipse 120, -5, 220, 50

Det ger en bild som ser ut som den jag bifogar.
Tanken är att för varje bokstav som skrivs ut, så roteras denna x antal grader.
Sen målas det på massa ellipser över hela bilden, för att försvåra ytterliggare.

Man kanske ska testa det där med en radda tecken, med ett antal man ska "plocka" ut.

createKey.jpg
Medlem sedan feb. 20034 441 inlägg
#58

Nä, detta funkar inte heller...
Nu börjar jag lacka på riktigt...
Förresten kom jag på en sak, om en besökare kommer till en sajt eller applikation med verifieringsnyckel där det (som i mitt fall) används sessions, vad händer om besökaren förbjuder användning av cookies..?

Jag fattar inte hur inläggen kan komma av sig själv, långa ibland helt tomma, ibland fulla med länkar, nu när det krävs en session hos den som postar.

Fler förslag?

289 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
156 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)