webForumDet fria alternativet

Spamskydd med verifieringsnyckel

ASP

57 svar · 6 929 visningar · startad av MickeA.com · sida 2 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
#21

Siluett skrev:

jaha??

Kolla vad din Session har för värde, så den skapats schysst och inte upphört.

Response.Write("Sessions värde: " & Session("keyCode")) : Response.End

Lägg det direkt under If Request.querystring("do") = "add" Then..

Medlem sedan mars 20041 505 inlägg
#22

Det finns väl ingen inbyggd MD5-funktion i ASP?

Medlem sedan feb. 20034 441 inlägg
#23

Troxy skrev:

Det finns väl ingen inbyggd MD5-funktion i ASP?

Stämmer bra, men i min zipfil finns en inkluderad fil med en funktion som gör en sträng till MD5.
Hittade funktionen någonstans för länge sen, kanske var här?

Hur som helst är den väldigt bra att använda när man tex. sparar lösenord i en databas, eller när man försöker undvika spambottar ;)

Medlem sedan apr. 200122 inlägg
#24

MickeA.com skrev:

Kolla vad din Session har för värde, så den skapats schysst och inte upphört.

Response.Write("Sessions värde: " & Session("keyCode")) : Response.End

Lägg det direkt under If Request.querystring("do") = "add" Then..

Du menar att jag ska skriva in det där under? Så, nu står det "Sessions värde:" på den vita sidan... Jag förstår nog inte riktigt...

Medlem sedan feb. 20034 441 inlägg
#25

Siluett skrev:

...nu står det "Sessions värde:" på den vita sidan... Jag förstår nog inte riktigt...

Något är tokigt, eftersom du inte ser något "värde", utan endast texten, innebär det att det inte finns någon session skapad.
Har du ändrat något i filen createKey.asp?
Något verkar det nämligen vara som inte stämmer.

Posta lite mer kod så ska jag försöka hjälpa dig!

Medlem sedan apr. 200122 inlägg
#26
<%
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db

If Request.Querystring("do")= "add" Then
	Response.Write("Sessions värde: " & Session("keyCode")) : Response.End

' POSTA FORMULÄRET, JÄMFÖR DEN HEMLIGA KODEN OCH SPARA:
	keyCode = Trim(Request.Form("keyCode"))
	If MD5(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

	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="" /><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
%>

det enda jag ändrat i keyCode är antal tecken.

Medlem sedan feb. 20034 441 inlägg
#27

Siluett skrev:

det enda jag ändrat i keyCode är antal tecken.

Hmm, okej, men eftersom du inte fick ut något värde av koden jag gav dig, så existerar inte sessionen.

Lägg

Response.Write(Session("keyCode")) : Response.End

Direkt efter

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

När du sedan postar formuläret bör du få en vit sida med ett värde, typ:

4nkn4knk54n4l5nlnvgpvofdmofm454

Något liknande iaf. för i denna session sparas den slumpade koden som är MD5-krypterad.

Får du inte ut något värde alls, så har du antingen stavat fel på sessionens namn, eller inte startat någon session.

Testa och återkom!

Medlem sedan aug. 20065 inlägg
#28

???

Jag får inte ihop det...

Medlem sedan feb. 20034 441 inlägg
#29

stjernfeldt skrev:

Jag får inte ihop det...

Ehh, kom gärna med en vettig fråga så lovar jag att komma med ett vettigt svar.
Det är inte lätt att hjälpa någon som inte talar om vad han / hon behöver hjälp med, vad som inte går, vad mna förväntat sig ska hända etc.

Visa lite kod och säg vad du vill åstadkomma, så lovar jag att göra allt jag kan för att hjälpa till.

Medlem sedan apr. 200122 inlägg
#30

MickeA.com skrev:

Hmm, okej, men eftersom du inte fick ut något värde av koden jag gav dig, så existerar inte sessionen.

Lägg

Response.Write(Session("keyCode")) : Response.End

Direkt efter

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

När du sedan postar formuläret bör du få en vit sida med ett värde, typ:

4nkn4knk54n4l5nlnvgpvofdmofm454

Något liknande iaf. för i denna session sparas den slumpade koden som är MD5-krypterad.

Får du inte ut något värde alls, så har du antingen stavat fel på sessionens namn, eller inte startat någon session.

Testa och återkom!

Aha... ja nu står det ju faktiskt

Sessions värde: 4e5f787e252753f0596c6bd309abef4a

när jag skrev som innan:

If Request.Querystring("do")= "add" Then
	Response.Write("Sessions värde: " & Session("keyCode")) : Response.End
Medlem sedan feb. 20034 441 inlägg
#31

Precis, nu börjar vi närma oss ;)
Raden du nu har under if reguest.querystring("do") ="add" then..., but ut den mot följande:

Response.Write("Sessionens värde: " & Session("keyCode") & "<br />")
Response.Write("Mitt inmatade värde: " & MD5(Trim(Request.Form("keyCode"))))
Response.End

Nu ska du få två värden, det övre är precis som förut sessionens värde och det under är det värde du matar in i den textruta där nyckeln skall skrivas in.
Du måste alltså fylla i det värde som står på bilden som skapas.

När du sedan postar, jämför de två värdena som skrivs ut, dom ska vara identiska.

Är dom inte det, har du antingen skrivit in fel kod, eller så har du gjort någon annat med scriptet.
Klistra in ditt resultat här sedan.

Får du samma värde på både raderna, är allt frid och fröjd och du kan köra den här ifsatsen där värdena jämförs.

Medlem sedan aug. 20065 inlägg
#32

Jag försöker hänga med i diskutionen här över...jag har samma problem...

Medlem sedan aug. 20065 inlägg
#33

Som sagt, jag har samma problem som "siluett" .
Jag driver en hemsida åt en klubb, lite asp har jag fattat men är ej haj på det...
så här ser min kod ut, kan du lägga in dessa komponenter så man får en verifieringsnyckel?

<%Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db

If Request.Querystring("do")= "" Then%>

<table border="0" width="400" align="center" cellpadding="3" cellspacing="0">
  <form method="post" action="<%=INC%>?do=add" name="gastbok"  onSubmit="return Gb()">
    <tr> 
      <td colspan="2" style="border-bottom: 1px solid #000000"><font size="2"><b>Gästboken</b></font></td></tr>
    <tr> 
      <td width="80"><b>Ditt namn:</b><br><input type="text" name="namn" size="25"></td>
      <td><b>Rubrik:</b><br><input type="text" name="rubrik" size="25"></td>
  </tr>
    <tr>
      <td><b>Din e-mail:</b> valfritt<br><input type="text" name="mail" size="25"></td>
      <td><b>Hemsida:</b> valfritt<br><input type="text" name="url" size="25"></td>
    </tr>
    <tr> 
      <td valign="top" colspan="2"> <b>Meddelande:</b><br><textarea name="msg" cols="60" rows="8"></textarea>

</td>
    </tr>
    <tr> 
      <td colspan="2"><input type="submit" value="Posta inlägg"></td>
    </tr>
  </form>
</table>

<%Set Recset = Server.CreateObject("ADODB.Recordset")

' Sidscriptet är nerladdat från [url]http://www.fatmilk.nu/[/url] 
' Skrivet av Ludvig "geek" Lindblom 
' [email]geek@fatmilk.nu[/email] 

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 gastbok Order By datum desc"
RecSet.Open SQL, Conn

If RecSet.EOF Then%>
<br>
<table border="0" width="500" align="center" cellpadding="3" cellspacing="0">
  <tr>
    <td><i>Inget har skrivit i gästboken.</i></td>
  </tr>
</table>
<%Else%>
<br>
<%With RecSet
     .MoveFirst 
     .PageSize = InlaggPerSida
     .AbsolutePage = sida
End With

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

<table border="0" width="500" align="center" cellpadding="3" cellspacing="0" style="border: 1px solid #000000">
  <tr>
     <td valign="top" background="man.gif">
     <%For Sid = 1 To Sidor
         If (Int(Sid)) = (Int(sida)) Then%><b><%=FixDigits(Sid,2)%></b><%Else%> <a href="<%=INC%>?next=<%=Sid%>"><%=FixDigits(Sid,2)%></a> <%End If
     Next%>
     </td>
   </tr>
</table>
<br>
<%End If
X = 0
Do While Not RecSet.EOF And X < RecSet.PageSize%>
<table border="0" width="500" align="center" cellpadding="3" cellspacing="0" style="border: 1px solid #000000">
  <tr>
    <td background="man.gif" width="300"><b><%=Recset("rubrik")%></b> | <%=Recset("namn")%></td><td align="right" background="man.gif" width="100"><img src="bilder/klocka.gif" border="0" alt="<%=FormatDateTime(RecSet("datum"),2)%> (<%=FormatDateTime(RecSet("datum"),4)%>)"> <%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%></td>
  </tr>
  <tr>
    <td colspan="2"><%=Link(RecSet("msg"))%></td>
  </tr>
<%If Recset("svar") <> "" Then%>
  <tr>
    <td colspan="2">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="2"><b>Svar:</b> <i><%=Replace(RecSet("svar"), vbCrLf, "<br>")%></i></td>
  </tr>
<%End If%>
</table>

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

<table border="0" width="500" align="center" cellpadding="3" cellspacing="0" style="border: 1px solid #000000">
  <tr>
     <td valign="top" background="man.gif">
     <%For Sid = 1 To Sidor
         If (Int(Sid)) = (Int(sida)) Then%><b><%=FixDigits(Sid,2)%></b><%Else%> <a href="<%=INC%>?next=<%=Sid%>"><%=FixDigits(Sid,2)%></a> <%End If
     Next%>
     </td>
   </tr>
</table>

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

ElseIf Request.QueryString("do") = "add" Then

   Namn       = Request.Form("namn")
   Rubrik      = Fixa(Request.Form("rubrik"))
   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 gastbok(namn, mail, url, msg,ip, rubrik) Values('"& namn &"','"& mail &"','"& url &"','"& msg &"','"& Ip &"','"& rubrik &"')")
   Response.Redirect INC
End If

Conn.Close
Set Conn=Nothing%>

</table>
Medlem sedan feb. 20034 441 inlägg
#34

stjernfeldt skrev:

Som sagt, jag har samma problem som "siluett" .
Jag driver en hemsida åt en klubb, lite asp har jag fattat men är ej haj på det...
så här ser min kod ut, kan du lägga in dessa komponenter så man får en verifieringsnyckel?

Jaha, ni sitter med samma gästboksscript.
Det är inte "bara att lägga in".

Till att börja med så måste dessa komponenter (i det här fallet AspJpeg) finnas installerat på server där sidan ligger.
Så, börja med att kolla att du har det stödet, och isf. vilken version av AspJpeg. Finns inte det är det bara onödigt arbete att lägga in "min kod", eftersom det ändå inte kommer funka utan denna komponent.

Medlem sedan aug. 20065 inlägg
#35

Det funkar med AspJpeg på mitt Hotell

MickeA.com skrev:

Jaha, ni sitter med samma gästboksscript.
Det är inte "bara att lägga in".

Till att börja med så måste dessa komponenter (i det här fallet AspJpeg) finnas installerat på server där sidan ligger.
Så, börja med att kolla att du har det stödet, och isf. vilken version av AspJpeg. Finns inte det är det bara onödigt arbete att lägga in "min kod", eftersom det ändå inte kommer funka utan denna komponent.

Medlem sedan feb. 20034 441 inlägg
#36

stjernfeldt skrev:

Det funkar med AspJpeg på mitt Hotell

Ok, men om du laddar hem filerna från min hemsida, du hittar länk i det första inlägget i denna tråd.

Försök sedan att lägga in det som behövs, det finns massor med hjälp i denna tråd.
Jag tror att det är bäst för din egen skull, att du försöker själv, annars lär man sig inget.
Ge inte upp om det inte går på direkten, försök igen och fråga här om du ändå inte får till det.
Glöm då inte att bifoga relevant kod och en förklaring vad det är som händer.

Medlem sedan apr. 200122 inlägg
#37

MickeA.com skrev:

Precis, nu börjar vi närma oss ;)
Raden du nu har under if reguest.querystring("do") ="add" then..., but ut den mot följande:

Response.Write("Sessionens värde: " & Session("keyCode") & "<br />")
Response.Write("Mitt inmatade värde: " & MD5(Trim(Request.Form("keyCode"))))
Response.End

Nu ska du få två värden, det övre är precis som förut sessionens värde och det under är det värde du matar in i den textruta där nyckeln skall skrivas in.
Du måste alltså fylla i det värde som står på bilden som skapas.

När du sedan postar, jämför de två värdena som skrivs ut, dom ska vara identiska.

Är dom inte det, har du antingen skrivit in fel kod, eller så har du gjort någon annat med scriptet.
Klistra in ditt resultat här sedan.

Får du samma värde på både raderna, är allt frid och fröjd och du kan köra den här ifsatsen där värdena jämförs.

Jaha du... *sucka* det gick ju inte...

Sessionens värde:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'MD5'

/dog/message.asp, line 56

och line 56 är ju givetvis

	Response.Write("Mitt inmatade värde: " & MD5(Trim(Request.Form("keyCode"))))
Medlem sedan feb. 20034 441 inlägg
#38

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!

Medlem sedan dec. 19996 721 inlägg
#39

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!

Medlem sedan mars 20041 505 inlägg
#40

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?

264 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)