tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
25
ZUGRIFFE
2637
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    redwing78 redwing78 ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Beiträge
    75
    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
     

  2. #2
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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

  3. #3
    Ali Baba Ali Baba ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    18
    Kann man nicht das einfach löschen? So kenn ichs mit vielen, vllt íst das ja was anderes?
     

  4. #4
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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

  5. #5
    redwing78 redwing78 ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Beiträge
    75
    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
     

  6. #6
    JanHH JanHH ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    26
    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
     

  7. #7
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Zitat Zitat von JanHH Beitrag anzeigen
    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

  8. #8
    redwing78 redwing78 ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Beiträge
    75
    ... und wie hast des genau angestellt, Luzie?
    Ist es kompliziert, eine kleine Rechenaufgabe zu programmieren?
    LG redwing78
     

  9. #9
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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

  10. #10
    redwing78 redwing78 ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Beiträge
    75
    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.asp
    Geändert von redwing78 (21.11.06 um 00:09 Uhr)
     

  11. #11
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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

  12. #12
    redwing78 redwing78 ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Beiträge
    75
    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
     

  13. #13
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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&ouml;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")) %>&nbsp;</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

  14. #14
    redwing78 redwing78 ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Beiträge
    75
    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
     

  15. #15
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    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 werden
    Geändert von Luzie (25.11.06 um 20:32 Uhr)
     
    liebe Grüße, die Luzie

Ähnliche Themen

  1. Gästebuch
    Von Rayvez im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 14.05.08, 14:39
  2. gästebuch
    Von komarovski im Forum PHP
    Antworten: 8
    Letzter Beitrag: 02.11.07, 07:56
  3. Gästebuch
    Von csfungamer im Forum PHP
    Antworten: 5
    Letzter Beitrag: 06.09.05, 20:04
  4. Gästebuch
    Von Christopher im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 10.07.04, 16:08