• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Spamschutz für Gästebuch

P51D

Mitglied
Hallo zusammen

Ich habe wieder einmal ein kleineres Problem. Und zwar wird mein Gästebuch seit letzte Woche regelrecht zugespamt. Gestern abend habe ich die PHP-Datei gesperrt, ihr also nur das Recht "Lesen" erteilt. Heute morgen hatte ich über 14 Spameinträge. Es wurde mir also direkt in die Datenbank einträge geschrieben, ohne über die PHP-Seite zu gehen.

Mein Gästebuch ist folgendermassen aufgebaut:
ich habe eine PHP-Datei, welche auf eine Datenbank zugreift (bei mir ein .txt), in welcher die Gästebucheinträge gespeichert werden.

Kann ich die Datenbank irgendiwie verschlüsseln oder sonst irgend einen Schutz einbauen?

Wenn ihr die Seite anschauen wollt: Gästebuch


Hier noch der Code für das Gästebuch. Habe ich im Internet gefunden und ein bisschen abgeändert:
PHP:
<div id="inhalt_mitte">                                                                    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
     <head>
      <title>Gästebuch</title>

    <script type="text/javascript">
    function eingaben_ueberpruefen() {
         if(document.eingabe.Name.value == "Name" || document.eingabe.Name.value.lenght < 4){
              document.getElementById("Name").style.backgroundColor="#FFFFB9";
              alert("Bitte geben Sie Ihren Namen ein!");
              return false;
         }
         else if(document.eingabe.Email.value.length < 10 || document.eingabe.Email.value.indexOf ('@',0) == -1 || document.eingabe.Email.value.indexOf ('.',0) == -1){
              document.getElementById("Email").style.backgroundColor="#FFFFB9";
              alert("Bitte geben Sie eine gültige E-Mail-Adresse ein.");
              return false;
         }
         else if(document.eingabe.Kommentar.value == "" || document.eingabe.Kommentar.value == "Kommentar" || document.eingabe.Kommentar.value.lenght < 10){
              document.getElementById("Kommentar").style.backgroundColor="#FFFFB9";
              alert("Bitte geben Sie einen Kommentar ein!");
              return false;
         }
         else
         return true;
    }
    </script>

    <style type="text/css">
    /* Hier können Sie Schriftgröße, Schriftart und Farbe einstellen */

    .smilie_gesichtsfarbe{
        background-color: #FFFF00;
    }
    .eingabe{                                                                /*Eingabefelder definieren*/
        border: solid 2px #C0C0C0;
    }
    .textfeld{                                                                /*Textfeld*/
        border: solid 2px #C0C0C0;
    }
    .button{                                                                /*Buttons definieren*/
        font-size: 14px;
        font-weight: bold;
        color: #0000FF;
        background-color: #808080;
    }
    body, table{                                                            /*Textfeld*/
        font-family: Verdana, Arial;    
        font-size: 12px;
    }
    hr{                                                                        /*Abtrennung von Eingabe, Einträge und Seiten, Login*/
        border: 0px;
        border-top: solid 2px #FFFFFF;
        border-bottom: solid 2px #FFFFFF;
        margin: 10px 20px 10px 0px;
    }
    #gbook a{                                                                /*Namen bei Einträge, Links */
        font-family: Verdana, Arial, Sans-Serif;
        font-size: 12px;
        font-weight: bold;
        text-decoration: None;
        color: #FFFFFF;
    }
    #gbook a:visited{
        color: #FFFFFF;
    }
    #gbook a:hover{
        color: #FFFFFF;
        text-decoration: none;
    }
    </style>

     </head>
    <body>

    <h3><u>Gästebuch</u></h3>

    <?php
    # E-Mail-Adresse
    $an = "[email protected]";

    # Homepage-Name
    $homepagename = "Harmonie Schwarzenburg";

    # Einträge pro Seite
    $Anzeige = 11;
    ?><h4><div id="gbook"><?php
    if ($_POST){
         // Variablen-Inhalt holen
         $Name = $_POST[Name];
         $Email = $_POST[Email];
         $Kommentar = $_POST[Kommentar];
         $Homepage = $_POST[Homepage];
 
         // IP einlesen
         $lgb = fOpen("gb_lastip.txt","r");
        $gb_lip = fGets($lgb, 255);
         fClose($lgb);
         $ip = $_SERVER["REMOTE_ADDR"];
 
          if (!empty($Name) && !empty($Email) && !empty($Kommentar) && $gb_lip != $ip){
               // Kommentar filtern
               $Kommentar = strip_tags(htmlentities(stripslashes(stripcslashes(trim($Kommentar)))));
               $Kommentar = str_replace("\\r", "", $Kommentar);
               $Kommentar = str_replace("\\n", "", $Kommentar);
               $Kommentar = str_replace("|", "", $Kommentar);
               $Name = strip_tags(htmlentities($Name));
               $Name = str_replace("|", "", $Name);

               if ($Homepage != ""){
                $Homepage = " &raquo;<a href=\"http://$Homepage\" target=\"_blank\">$Homepage</a>";
               }
               // Eintrag zusammenstellen
               $Eintrag = "» <a>$Name</a> - <small title=IP:$ip>" . date("d.m.Y/H:i") . "</small>$Homepage<br>$Kommentar|\n";
               // Eintrag in GB schreiben
               $Datei = fOpen("gaestebuch-daten.txt", "a+");
               fWrite($Datei,$Eintrag);
               fClose($Datei);

               // E-Mail versenden
               $betreff = "Gästebucheintrag: $homepagename";
               @mail($an, $betreff, $Kommentar, "From: $Name <$Email>");
               // Danke
               echo "<p><strong>Vielen Dank $Name, f&uuml;r den G&auml;stebuch-Eintrag.</strong></p>";

               // IP speichern
               $lgb = fOpen("gb_lastip.txt","w");
               fPuts($lgb,"$ip");
              fClose($lgb);
          }
    }
    else{
    ?></div></h4>
    <!-- ** Eingabefelder für Gästebuch ** -->
    <form action="<?php echo $_SERVER['PHP_SELF'] ?>?seite=0" method="post" name="eingabe" onSubmit="return eingaben_ueberpruefen(this.form)">
        <div style="position: absolute; top: 40px; left: 20px">
            <h4><strong>Name:</strong></h4> 
        </div>
        <div style="position: absolute; top: 50px; left: 120px">
             <input type="text" size="50" name="Name" id="Name" class="eingabe" title="Name" onFocus="this.style.backgroundColor='#FFFFFF';"><br>
        </div>
         <div style="position: absolute; top: 75px; left: 20px">
             <h4><strong>E-Mail:</strong></h4> 
         </div>
         <div style="position: absolute; top: 85px; left: 120px">
             <input type="text" size="50" name="Email" id="Email" title="E-Mail" class="eingabe" onFocus="this.style.backgroundColor='#FFFFFF';"><br>
         </div>
         <div style="position: absolute; top: 110px; left: 20px">
             <h4><strong>Homepage:</strong></h4> 
         </div>
         <div style="position: absolute; top: 120px; left: 120px">
             <h4>
             <i>http://</i><input type="text" size="42" name="Homepage" id="Homepage" title="Homepage" class="eingabe" onFocus="this.style.backgroundColor='#FFFFFF';"><small>(Optional)</small><br>
             </h4>
         </div> 
         <div style="position: absolute; top: 150px; left: 20px">
             <h4>
                <?php include("smilies/smilies.txt"); ?>
            </h4>
        </div>
        <div style="position: absolute; top: 290px; left: 20px">
             <h4><small>Um Missbrauch zu vermeiden, wird die IP-Adresse gespeichert.</small></h4><br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
             <input type="reset" class="button"> &emsp; 
             <input type="submit" value="Eintragen" class="button">
         </div>
    </form>
    <br>
    <div style="position: absolute; top: 400px; left: 20px" id="gbook">                <!-- Einträge ausgeben -->
        <h4>
        <?php
        }
        
        $a = 0;                                                                        //Anzahl Seiten
        $seite = ((isset($_GET["seite"])) ? $_GET["seite"] : 0);                    //Anfangsseite wenn nichts angeklickt wurde

        // Einträge auslesen
        $fp = fOpen("gaestebuch-daten.txt", "r");
        $Inhalt = fRead($fp, filesize("gaestebuch-daten.txt"));
        fClose($fp);

        $Inhalt = explode("|", $Inhalt);

        if (count($Inhalt) > 0){
             $Inhalt = array_reverse($Inhalt);
             $eintraege = count($Inhalt); $eintraege--;

             echo "<hr><b>$eintraege</b> Einträge - Seite: ";

             // Seitenlinks erstellen
             for ($zaehler = 0; $zaehler < count($Inhalt); $zaehler = $zaehler + $Anzeige){
                  $a++;
                 echo "<a href=\"" .$_SERVER['PHP_SELF'] ."?seite=$zaehler\">" .(($zaehler == $seite) ?"<b>" .$a ."</b>" :$a) ."</a> \r";        
             }

             echo "<hr>\r";

             // GB-Ausgabe
             for ($c = $seite; $c < ($seite + $Anzeige); $c++){
                  if (@$Inhalt[$c] != "" && $c > 0){
                       echo "<p>" . ($c) . " ";
                       echo ersetze_smilie($Inhalt[$c]);
                  }
             }
        }

    <p>&nbsp;</p>
    <hr>
    </div>
    <div align=center id="gbook" style="position: relative; left: 450px">
     <a href="gaestebuch-editor.php">Login</a>
    </div>

    </body>
    </html>             
</div>
(habe ein paar Zeilen aus dem Code entfernen müssen, damit ich ihn posten konnte)
 
Gestern abend habe ich die PHP-Datei gesperrt, ihr also nur das Recht "Lesen" erteilt. Heute morgen hatte ich über 14 Spameinträge.
[...]
ich habe eine PHP-Datei, welche auf eine Datenbank zugreift (bei mir ein .txt), in welcher die Gästebucheinträge gespeichert werden.

Dann musst du die Rechte der txt-Datei ändern. Mit den Rechten hast du glaub ich was falsch verstanden. Die Rechte beziehen sich auf den Benutzer. Sprich du kannst die PHP-Datei nur lesen aber nicht verändern. Die txt-Datei kann man jedoch noch verändern.
Rechte unter Linux
Aber wenn du nur die Rechte änderst ist es auch nicht das Gelbe vom Ei...

Ich kann dein Gästebuch leider nicht öffnen, dennoch empfehle ich dir bei google mal nach "captcha" zu suche.
 
Captcha sind nicht barrierefrei, also vergiss es!
Deine Wortwahl gefällt mir...

Wer hat was von barrierefrei gesagt?
Wer in seinem Quelltext erst ein <div> schreibt und dann erst den <!DOCTYPE ...> schreibt, nach validator 272 Fehler einbaut und nach qualidator eine bewertung von 62.1% bekommt,(dachte ich) setzt auf barrierefrei nicht so großen Wert.
 
Zuletzt bearbeitet:
Deine Wortwahl gefällt mir...

Wer hat was von barrierefrei gesagt?
Wer in seinem Quelltext erst ein <div> schreibt und dann erst den <!DOCTYPE ...> schreibt, (dachte ich) setzt auf barrierefrei nicht so großen Wert.
Damit hilfst du ihm oder ihr ja auch nicht. Wenn du den Code noch schlimmer machst( ich hab mir den nicht angeguckt). Ausserdem was stört dich denn an der Wortwahl. er hat nur darauf hingewiesen das Captchas nicht barrierefrei sind und deshalb sollte man sie am besten nicht nutzen.
 
Wer hat was von barrierefrei gesagt?
Wer in seinem Quelltext erst ein <div> schreibt und dann erst den <!DOCTYPE ...> schreibt, nach validator 272 Fehler einbaut und nach qualidator eine bewertung von 62.1% bekommt,(dachte ich) setzt auf barrierefrei nicht so großen Wert.
Naja, da könntest du evtl. recht haben! :D Aber mich persönlich nerven diese Dinger, und wenns schon mal ne Möglichkeit gibt, das ohne Captchas zu regeln, finde ich, sollte man das auch machen!

Kann man so nicht sagen :) Es gibt heute Captchas zum Anschauen und Anhören; oder sollen wir jetzt auch noch Rücksicht auf die 0,05% Taubblinden nehmen, von denen vllt 10% das Internet nutzen? ^^
Na klar, man weiß ja nie, wanns einen selbst trifft! ^^
 
Damit hilfst du ihm oder ihr ja auch nicht. Wenn du den Code noch schlimmer machst( ich hab mir den nicht angeguckt). Ausserdem was stört dich denn an der Wortwahl. er hat nur darauf hingewiesen das Captchas nicht barrierefrei sind und deshalb sollte man sie am besten nicht nutzen.
Es war nur nach einer Lösung gefragt, nicht ob diese barrierefrei ist oder nicht. Wie Icy schon erwähnt gibt es möglichkeiten captchas vorlesen zu lassen. Gestört hat mich das "also vergiss es!".
Gefunden habe ich wan24.de - Captcha Service mit vorlese funktion ;)
 
Es war nur nach einer Lösung gefragt, nicht ob diese barrierefrei ist oder nicht.
Es gibt immer ein Duzent Möglichkeiten, aber nicht alle sind dann auch gut! Oder empfiehlst du jemanden seine Homepage mit Frames zu gestalten, nur weil es möglich ist?

Gestört hat mich das "also vergiss es!"
Mir ist leider kein Synonym eingefallen! Hab's auch nicht als Beleidigung gemeint (wie du es in deiner Bewertung geschrieben hast: "Wir sind hier im Forum einen Anderen Ton gewöhnt.")!
 
Zurück
Oben