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..
57 svar · 6 929 visningar · startad av MickeA.com · sida 2 av 3
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 →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..
Det finns väl ingen inbyggd MD5-funktion i ASP?
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 ;)
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.EndLä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...
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!
<%
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.
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!
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.
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.EndDirekt 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:
4nkn4knk54n4l5nlnvgpvofdmofm454Nå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
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.
Jag försöker hänga med i diskutionen här över...jag har samma problem...
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"> </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>
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.
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.
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.
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.EndNu 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"))))
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!
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!
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?