ERLEDIGT
NEIN
NEIN
ANTWORTEN
25
25
ZUGRIFFE
2637
2637
EMPFEHLEN
-
Hallo allerseits,
habe ein ASP-Gästebuch, in dem seit einigen Tagen immer weider SPAM-Messages auftauchen. Vielleicht kann mir jemand einen Tipp geben, was man dagegen tun kann!
Habe schon versucht, die DB zu verschlüsseln, funktioniert aber nich.
Link: http://www.fckitz.at/fcreith/gaestebuch.asp
Danke im Voraus!!
LG redwing78
-
Hi
Du kannst über die Formularvalidierung z.B. eine "Rechenaufgabe" zur Verfügung stellen, die der User ausrechnen muss.
Dies macht man wie folgt:
Man berechnet 2 Zufallswerte, 1. Wert 1-99, 2. Wert 1-9. Diese Werte bzw. Berechnung speichert man in Sessions. Der Wert des Formularfelds wird dann mit der Berechnung verglichen, d.h. der User muss die Addition dann in das Formularfeld einfügen. Wird die falsche Berechnung erstellt oder das Feld bleibt leer, kann das Formular nicht abgeschickt werden.Geändert von Luzie (13.11.06 um 20:31 Uhr)
liebe Grüße, die Luzie
-
Kann man nicht das einfach löschen? So kenn ichs mit vielen, vllt íst das ja was anderes?
-
Hi
klar kannst Du das löschen.
Aber in der Regel sausen da irgendwelche Sucher (Robots) durch, die Dir direkt eine n-Zahl ein Spam-Einträgen liefern. Da wird das Löschen schon mal zum Albtraum.
Die können zwar Formularfelder füllen, aber keinen Rechenaufgaben lösen.
Geändert von Luzie (26.11.06 um 22:33 Uhr)
liebe Grüße, die Luzie
-
Hi Luzie,
danke für den guten Tipp - abe rich hab keine Ahnung, wie ich das anstellen kann.... würdest mir evtl. dabei helfen, wie ich den Code von meiner ASP-Seite adaptieren muss?
Liebe Grüsse, redwing78
-
Hallo,
ich hatte das Problem kürzlich auch (allerdings mit einen PHP-Gästebuch, aber die Vorgehensweise ist diegleiche).
Ich habe dann mein Gästebuch einfach in ein moderiertes Gästebuch umgewandelt. Das heißt, ich habe in der Datenbank eine Flag "Freigeschaltet" gesetzt, die standardmäßig erst einmal "0" ist. Nur wenn ich manuell einen Gästebuch-Eintrag freischalte, wird sie auf "1" gesetzt und der Beitrag erscheint im Gästebuch.
Die Spammer können nun zwar weiter posten, aber es wird Ihnen nicht viel nützen, da die Einträge nicht mehr erscheinen.
viele Grüße
Jan
-
Hi
das ist auch eine Lösung, hat aber zum Ergebnis, dass Du hier ständig aktiv sein musst. Ich habe in einem Weblog eine ganze zeitlang rd. 100 Einträge pro Nacht bekommen. Das macht einfach keinen Spaß mehr. Ich habs dann abgestellt und überarbeitet (Captcha, IP-Sperre für einen Zeitraum). Und nu ist Ruhe
liebe Grüße, die Luzie
-
... und wie hast des genau angestellt, Luzie?
Ist es kompliziert, eine kleine Rechenaufgabe zu programmieren?
LG redwing78
-
Hi
eine Rechenaufgabe zu programmieren ist nicht schwer. ASP/vbscript kennt auch Rechenoperatoren wie + - * und /.
Man muss es einfach mal als ganzes sehen.
Hier ein Beispiel zum Testen
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <% option explicit ' --- Sessions erstellen und Wert festlegen function wert(z1,z2) RANDOMIZE(TIME()) dim u : u = z1 dim o : o = z2 wert = INT( (o-u +1) * RND()+u) end function ' --- Session mit Werte befüllen if session("z1") = "" then session("z1") = wert(10,99) if session("z2") = "" then session("z2") = wert(1,9) ' --- Per "Zufall" entscheiden, ob Summe oder Subtration dim zZahl1, y zZahl1 = session("z1") + session("z2") y = " und " if session("z2") >= 5 then zZahl1 = session("z1") - session("z2") y = " minus " end if ' --- Aufruf definieren dim zZahl zZahl = "Was ist das Ergebnis von " & _ session("z1") & y & session("z2") & "?<br><br>" dim ausgabe ausgabe = "Bitte folgende Felder * ausfüllen" ' --- Ist das Formular abgeschickt if Request.Form.count > 0 then dim zahl zahl = Request.form("zahl") ' --- Überprüfungsvariablen den Wert ok bzw. 1 geben dim allesok allesok = 1 ' --- ist Feldwert ungleich des Sessionergebnisses, ist der Eintrag falsch if cstr(zahl) <> cstr(zZahl1) then allesok = 0 Ausgabe = "<span style=""color:red"">Was ist das Ergebnis?</span>" end if end if ' --- Ist der Feldwert korrekt eingegeben, können die Formularergebnisse weiterverarbeitet werden if allesok then Response.write "alles ok" session.contents.remove("z2") session.contents.remove("z1") ' --- Optional.. nur zum Testen, Neustart der Seite Response.write "<br><a href=""" & Request.ServerVariables("SCRIPT_NAME") & """>start</a>" else ' --- Start des Formulars Response.write ausgabe call formular end if sub formular %> <form method="post" action="<% = Request.ServerVariables("SCRIPT_NAME")%>"> <div><% = zZahl %></div> <input type="text" name="zahl" value="<% = zahl %>"/><br /> <input type="submit" name="Submit" value="Senden" id="Submit"> </form> <% end sub %>Geändert von Luzie (17.11.06 um 22:00 Uhr)
liebe Grüße, die Luzie
-
Hi! Danke für den Code, habe ihn schon eingebaut.
Erhalte aber seltsamerweise einen Fehler:
Laufzeitfehler in Microsoft VBScript- Fehler '800a01f4'
Variable ist nicht definiert: 'RS'
/fcreith/gaestebuch.asp, line 114
Oberhalb dieses Fehlers wird angezeigt "Bitte folgende Felder ausfüllen",
danach ein Eingabefeld und "Senden"-Button.
Wieso werden auf einmal RS-Recordsets nicht mehr erkannt?
LG redwing78
www.fckitz.at/fcreith/gaestebuch2.aspGeändert von redwing78 (21.11.06 um 00:09 Uhr)
-
Hi
weil Du rs als Variablen nicht definiert hast.
Sobald das Script mit option explicit beginnt, müssen die Variablen definiert werden.
dim rs
Mehr kann ich dazu nicht sagen, da ich den Stand Deines jetzigen Scirptcode nicht kennen.liebe Grüße, die Luzie
-
Hi, danke! Habe nun alle Variablen definiert!
Jetzt steht nur da: "Was ist das Ergebnis?"
Und dann ein leeres Eingabeformular ...
www.fckitz.at/fcreith/gaestebuch2.asp
Der Code wurde ganz am Anfang des ASP-Dokuments eingefügt.
Danach kommt der Teil, wo die Einträge eingetragen werden,
anschließend derjenige, de die bestehenden ausliest.
Den Quellcode hab ich in eigene Textdatei gegeben, weil sonst würde dieser dieses Posting sprengen: www.fckitz.at/fcreith/gaestebuch2_source.txt
Danke, LG redwing78
-
Hallo
Du hast versucht, mein Formular in Dein Script einzubauen.
Dadurch hast Du nun 2 Formulare im Scirpt und 2x die Abfrage, ob das Formular abgeschickt wird.
Der Übersichtlichkeit halber sollte man sich bei solchen doch komplexeren Sachen angewöhnen, Scirptteile über dem Header in Funktionen auszulagern.
Im html-Teil sollte nur das nötigste eingefügt werden.
Wichtig ist vor allem die Formularvalidierung.
Weiterhin solltest Du Hochkomma replacen und bei der Ausgabe kein html zulassen (server.htmlencode(feld))
Das Formular habe ich jetzt zusammengepackt und die Abfrage direkt dort hineingesetzt.
Weiteres steht in den Kommentarzeilen.
Ich habe es jetzt nicht getestet.
Ich will jetzt nicht sehr viel an dem Scirpt verändern, Du sollst es ja auch selbst erlernen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
<%@Language="VBScript" CODEPAGE="1252"@%> <% dim strDB, strConn ' --- Verbindung zur Datenbank strDB = "Data Source=" & Server.MapPath("../datenbank/fcreith.mdb") ' Pfad und Dateiname der Datenbank strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & strDB ' Parameter zum Öffnen der Datenbank Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open strConn function umwandeln(s) s = replace(s,"'","''") umwandeln = s end function ' -- Zuordnen der Formularwerte dim nDatum, nName, nOrt, nEmail, nNachricht nDatum = umwandeln(Request.Form("nDatum")) nName = umwandeln(Request.Form("nName")) nOrt = umwandeln(Request.Form("nOrt")) nEMail = umwandeln(Request.Form("nEMail")) nNachricht = umwandeln(Request.Form("nNachricht")) ' --- Funktion, womit ein Eintrag ins Gästebuch geschrieben werden kann. function getInsert dim strSQL strSQL = "INSERT INTO Gaestebuch (Datum, Name, Ort, EMail, Nachricht, Aktiv) VALUES ('" & nDatum & "', '" & nName & "', '" & nOrt & "', '" & nEMail & "', '" & nNachricht & "', TRUE)" objConn.Execute(strSQL) ' --- hier sollte besser auf eine Bestätigungsseite gelinkt werden ' --- damit nicht nachreloadet werden kann. ' --- Diese kann dann wieder per Meta Refresh auf das Gästebuch weiterleiten. ' --- bsp. ' objConn.close ' set objconn = nothing 'response.redirect "danke.asp" getInsert = "<font face='Verdana' size='1'><p><b><Resultat:</b> Der Datensatz wurde erfolgreich hinzugefügt!<br><a href='gaestebuch2.asp'>Gästebuch vollständig anzeigen</a></font></p>" end function ' --- Sessions mit Werten befüllen function wert (z1,z2) RANDOMIZE(TIME()) dim u : u = z1 dim o : o = z2 wert = INT( (o-u +1) * RND()+u) end function if session("z1") = "" then session("z1") = wert(10,99) if session("z2") = "" then session("z2") = wert(1,9) zZahl1 = session("z1") + session("z2") y = " und " if session("z2") >= 5 then zZahl1 = session("z1") - session("z2") y = " minus " end if ' --- Aufruf definieren dim zZahl zZahl = "Was ist das Ergebnis von " & _ session("z1") & y & session ("z2") & "?<br><br>" dim ausgabe ausgabe = "Bitte folgende Felder * ausfüllen" dim zahl zahl = Request.form("zahl") ' --- Funktion zum Anzeigen der Daten. function anzeigen %> <hr color="#C0C0C0" width="640" size="1" align="left"> <% dim strTabelle strTabelle = "Mannschaften" ' Name der Tabelle oder Abfrage, die geöffnet werden soll Set objRS = Server.CreateObject("ADODB.Recordset") ' Objekt fuer das Recordset-Objekt strSQL = "SELECT TOP 100 * FROM Gaestebuch WHERE Aktiv=TRUE ORDER BY EintragID DESC" objRS.Open strSQL, objconn ' objRS.MoveFirst ' Geht zum ersten Datensatz --- kann raus! dim intCounter intCounter = 1 While Not objRS.EOF ' Liest, bis das Ende der Daten erreicht ist %> <table width="640" cellpadding="2" cellspacing="0" border="1" bordercolor="#EBEBEB" background="images/bg_gitter.gif" height="120"> <tr height="20"> <td width="20%" class="headline2">Eintrag #<% Response.Write objRS("EintragID") %></td> <td width="80%" class="headline2" align="right"><% Response.Write objRS("Name") %> aus <% Response.Write objRS("Ort") %></td> </tr> <tr height="100"> <td width="20%" class="texts" valign="top"><% Response.Write objRS("Datum") %><br> <% if objRS("EMail")="" then Response.Write ("") ELSE Response.Write ("<a href='mailto:" & objRS("EMail") & "'>E-Mail</a>") END if %> </td> <td width="80%" class="texts" valign="top"><% Response.Write Server.HTMLEncode(bjRS("Nachricht")) %> </td> </tr> </table> <br> <% intCounter = intCounter + 1 objRS.MoveNext ' Geht einen Datensatz weiter Wend %> <% objRS.Close ' Recordsetobjekt schliessen Set objRS = Nothing end function %> <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Language" content="de-at"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <link href="css_fcreith.css" rel="stylesheet" type="text/css"> <title>FC Reith - Gästebuch</title> </head> <body> <p><img border="1" src="images/banner_gb.jpg" width="640" height="43"></p> <% ' --- Formularvalidierung if Request.Form.count > 0 then dim allesok allesok = 1 ' --- ist Feldwert ungleich des Sessionergebnisses, ist der Eintrag falsch if cstr(zahl) <> cstr(zZahl1) then allesok = 0 Ausgabe = "<span style=""color:red"">Was ist das Ergebnis?</span>" ' --- Aufruf, wenn Feld Nachricht nicht ausgefüllt worden ist elseif isnull(nNachricht) or nNachricht = "" then allesok = 0 Ausgabe = "<span style=""color:red"">Bitte Nachrichtenfeld ausfüllen</span>" end if end if ' -- Ist der Feldwert korrekt angegeben, können die Formularergebnisse weiterverarbeitet werden if allesok then ' --- Löschen der Sessions session.contents.remove("z2") session.contents.remove("z1") ' --- Falls weiterleitung ' getinsert ' --- ansonsten Response.write getinsert ' --- ansonsten else ' --- Start des Formulars ' --- Ausgabe von evtl. Fehlern Response.write ausgabe call formular ' --- anzeigen der gesamten Daten response.write anzeigen end if %> </body> </html> <% objConn.Close ' Verbindungsobjekt schließen Set objConn = Nothing %> <% sub Formular %> <form method="post" action="<% Request.ServerVariables("SCRIPT_NAME")%>"> <table border="0" width="640" id="table1" cellspacing="0" cellpadding="2" background="images/bg_gitter.gif"> <tr> <td class="headline2" width="50%" align="center">Ihre Daten</td> <td class="headline2" width="50%" align="center">Ihre Nachricht</td> </tr> <tr> <td width="50%" class="texts"> <table border="0" width="100%" id="table2" cellspacing="0" cellpadding="2"> <tr> <td class="texts"><b>Datum</b></td> <td class="texts"><input type="text" name="nDatum" size="30" value="<% = Date() %>"></td> </tr> <tr> <td class="texts"><b>Name</b></td> <td class="texts"><input class="editfrei" type="text" name="nName" size="30"></td> </tr> <tr> <td class="texts"><b>Ort</b></td> <td class="texts"><input type="text" name="nOrt" size="30"></td> </tr> <tr> <td class="texts"><b>E-Mail</b></td> <td class="texts"><input class="edit" type="text" name="nEMail" size="30"></td> </tr> </table> </td> <td class="texts" width="50%"> <div><% = zahl%></div> <input type="text" name="zahl" value="<% = zahl %>"/><br /> <textarea class="edit" rows="5" name="nNachricht" cols="30"></textarea></td> </tr> </table> <p><input class="submit" type="submit" name="go" value="Speichern"> </p> </form> <% end sub %>Geändert von Luzie (22.11.06 um 18:26 Uhr)
liebe Grüße, die Luzie
-
Hi Luzie,
danke für die Hinweise!
Habe das Script jetzt aktualisiert und dann auch den Link auf eine Bestätigungsseite aktiviert. Es wird allerdings die "Kontrollrechnung" nicht angezeigt, es ist einfach ein leeres Formular da, sieh mal: http://www.fckitz.at/fcreith/gaestebuch2.asp
Der aktuelle Quelltext: http://www.fckitz.at/fcreith/gaestebuch2_source.txt
Was muss noch geändert werden?
Danke - LG
-
Hi
Die Kontrollrechung ist in einer Variablen hinterlegt, diese heißt zZahl. Dort steht der Text der Aufgabe drin, das, was der User rechnen muss.
Das Ergebnis steht in der Variablen zZahl1 und muss dann mit dem Ergebnis des Formularfeldes zahl verglichen werdenGeändert von Luzie (25.11.06 um 20:32 Uhr)
liebe Grüße, die Luzie
Ähnliche Themen
-
Gästebuch
Von Rayvez im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 14.05.08, 14:39 -
gästebuch
Von komarovski im Forum PHPAntworten: 8Letzter Beitrag: 02.11.07, 07:56 -
Gästebuch
Von csfungamer im Forum PHPAntworten: 5Letzter Beitrag: 06.09.05, 20:04 -
Gästebuch
Von Christopher im Forum Flash PlattformAntworten: 1Letzter Beitrag: 10.07.04, 16:08





Zitieren
Login





