kostenloser Webspace werbefrei: lima-city


Spamschutz in Gästebuch einbauen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    Hallo !

    Ich habe mir ein Gästebuch selber programmiert.

    index.php

    ...
    <?php require_once('antispam.php'); ?>
    <?php
    
       if($_GET['action'] == neu) {
    $_SESSION['beitrag_gestartet'] = time();
    
        echo " 
    <form action=\"eintragen.php\" method=\"post\" name=\"form\">
    <font face=\"Arial\">Ihr Name:</font><br>
    <input name=\"name\" size=\"40\"><br><br>
    
    <font face=\"Arial\">E-Mail:</font><br>
    <input name=\"email\" size=\"40\"><br><br>
    
    <font face=\"Arial\">Inhalt:</font><br>
    <textarea name=\"text\" cols=\"40\"
     rows=\"12\" wrap=\"physical\"></textarea><br>
    <p align='center'><table class='forum' border='0'>
       <tr>
        <tr>   
        <td><a href=\"javascript:seticon(':)')\"><img src='images/smilies/1.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':(')\"><img src='images/smilies/2.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':D')\"><img src='images/smilies/3.gif' border='0'></a></td>					
        <td><a href=\"javascript:seticon(':P')\"><img src='images/smilies/4.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':o')\"><img src='images/smilies/5.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(';-)')\"><img src='images/smilies/6.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':8')\"><img src='images/smilies/7.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':-(')\"><img src='images/smilies/8.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':-o')\"><img src='images/smilies/9.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':love:')\"><img src='images/smilies/10.gif' border='0'></a></td>
      </tr>
      <tr>
        <td><a href=\"javascript:seticon(':kiss:')\"><img src='images/smilies/11.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':-D')\"><img src='images/smilies/12.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(';)')\"><img src='images/smilies/13.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':cool:\")'><img src='images/smilies/14.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':boese:\")'><img src='images/smilies/15.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':eek:')\"><img src='images/smilies/16.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':cry:')\"><img src='images/smilies/17.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':confused:\")'><img src='images/smilies/18.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':bigrin:')\"><img src='images/smilies/19.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':doubt:')\"><img src='images/smilies/20.gif' border='0'></a></td>
      </tr>
      <tr>   
        <td><a href=\"javascript:seticon(':evil:')\"><img src='images/smilies/21.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':-|')\"><img src='images/smilies/22.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':rolleyes:\")'><img src='images/smilies/23.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':mad:')\"><img src='images/smilies/24.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':surprised:')\"><img src='images/smilies/25.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':30:')\"><img src='images/smilies/30.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':thumb:')\"><img src='images/smilies/31.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':32:')\"><img src='images/smilies/32.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':33:')\"><img src='images/smilies/33.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':34:')\"><img src='images/smilies/34.gif' border='0'></a></td>
      </tr>
      <tr>   
        <td><a href=\"javascript:seticon(':35:')\"><img src='images/smilies/35.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':36:')\"><img src='images/smilies/36.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':37:')\"><img src='images/smilies/37.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':38:')\"><img src='images/smilies/38.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':39:')\"><img src='images/smilies/39.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':40:')\"><img src='images/smilies/40.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':41:')\"><img src='images/smilies/41.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':42:')\"><img src='images/smilies/42.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':43:')\"><img src='images/smilies/43.gif' border='0'></a></td>
        <td><a href=\"javascript:seticon(':44:')\"><img src='images/smilies/44.gif' border='0'></a></td>
      </tr>
    </table></p><br><br>
    <table>
      <tr> 
      <td><font face=\"Arial\">Sicherheitscode:</font></td>
      <td><img src=\"$pic_name\"></td>
        </tr>
        <tr> 
         <td>&nbsp;</td>
       <td><input type=\"text\" name=\"antispam\" size=\"4\" maxlength=\"4\"><input type=\"hidden\" name=\"hashfile\" value=\"<?php echo $txt_name ?>\"></td></tr>
    </table></p><br>
    <input type=\"submit\" value=\"Absenden\">
    </form>
    <br>
    
     "; 
    
    } 
    
    ?>
    ...


    eintragen.php

    <?php 
    
    require('../admin/sql.php');
    
    $name = mysql_real_escape_string($_POST['name']); 
    $email = mysql_real_escape_string($_POST['email']); 
    $inhalt = mysql_real_escape_string($_POST['text']); 
    
    $datum = time(); 
    $aktiv = 1; //1: Einträge werden aktiviert gespeichert, 2: Einträge werden deaktiviert gespeichert 
    
    if($_SESSION['letzter_beitrag'] < (time() - 60)) {
    if($_SESSION['beitrag_gestartet'] < (time() - 10)) {
    // eintragen
    
    //Wurden die benötigten Felder ausgefüllt? 
    if($name == "" OR $inhalt == "") 
        { 
       echo "<font face=\"Arial\">Bitte die Felder \"Name\" und \"Inhalt\" ausfüllen<br><br><a href=\"javascript:history.back()\">Zur&uuml;ck</a></font>"; 
       exit; //Script Ablauf wird unterbrochen, Eintrag wird nicht gespeichert 
       } 
    
    
    $eintrag = "INSERT INTO guestbook (datum, name, email, inhalt, aktiv) VALUES ('".htmlentities($datum)."', '".htmlentities($name)."', '".htmlentities($email)."', '".htmlentities($inhalt)."', '".htmlentities($aktiv)."')"; 
    $eintragen = mysql_query($eintrag); 
    
    //Wurde der Eintrag erfolgreich gespeichert? 
    if($eintragen == true) 
       { 
       echo "<p align=\"center\"><font face=\"Arial\">Beitrag erfolgreich gespeichert.<br><br><a href=\"index.php\">Zur&uuml;ck zum G&auml;stebuch</a></font></p> "; 
       } 
    else 
       { 
       echo "<p align=\"center\"><font face=\"Arial\">Fehler beim Speichern.<br><br><a href=\"javascript:history.back()\">Zur&uuml;ck</a></font></p></p>"; 
       } 
    
    ?>


    Heute Abend habe ich versucht einen Spamschutz einzubauen (siehe index.php unten). Wie kann ich prüfen, ob der Code richtig eingegeben wurde. Wie kann ich eine Meldung ausgeben, wenn der Code nicht richtig eingegeben wurde?

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. mach einfach eine abfrage

    if($_POST['antispam'] == $_POST['hashfile'])
    {
    //was passieren soll wenn der code stimmt
    }
    else
    {
    //meldung wenn der code falsch ist
    }


    mfg
  4. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    syberpsace schrieb:
    mach einfach eine abfrage

    if($_POST['antispam'] == $_POST['hashfile'])
    {
    //was passieren soll wenn der code stimmt
    }
    else
    {
    //meldung wenn der code falsch ist
    }


    mfg



    Hi !

    ich habe es so probiert:

    if($_POST['antispam'] == $_POST['hashfile'])
    {
    $eintrag = "INSERT INTO guestbook (datum, name, email, inhalt, aktiv) VALUES ('".htmlentities($datum)."', '".htmlentities($name)."', '".htmlentities($email)."', '".htmlentities($inhalt)."', '".htmlentities($aktiv)."')"; 
    $eintragen = mysql_query($eintrag); 
    }
    else
    {
    echo 'Der Sicherheitscode ist falsch! Bitte versuche es erneut!';
    }


    Aber es kommt trotzdem der Fehler, obwohl der Code richtig ist.
  5. da du dich schon innerhalb eines php-tags befindest, kannst du die variable $txt_name einfach mit ".$txt_name." in die ausgabe einbauen.
    <td><input type=\"text\" name=\"antispam\" size=\"4\" maxlength=\"4\"><input type=\"hidden\" name=\"hashfile\" value=\"".$txt_name ."\"></td></tr>


    mfg

    ps: darauf wärst du auch von selbst gekommen, wenn du dir den von dir erzeugten quellcode mal im browser angesehen hättest
  6. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    syberpsace schrieb:
    da du dich schon innerhalb eines php-tags befindest, kannst du die variable $txt_name einfach mit ".$txt_name." in die ausgabe einbauen.
    <td><input type=\"text\" name=\"antispam\" size=\"4\" maxlength=\"4\"><input type=\"hidden\" name=\"hashfile\" value=\"".$txt_name ."\"></td></tr>


    mfg

    ps: darauf wärst du auch von selbst gekommen, wenn du dir den von dir erzeugten quellcode mal im browser angesehen hättest



    Danke ! Jetzt geht alles !
  7. Deine Spamschutz ist etwas überflüssig.
    Du legst sozusagen den Haustürschlüssel unter die Türmatte..

    Den Hashcode sollte man Serverseitig und eindeutig abspeichern.
    =>
    - PHP
    Generiere Hashcode
    Schreibe Hashcode mit md5 verschlüsselt mit einer ID und einem Timestamp in DB
    Schreibe ID in das "hidden field"
    Generiere temporäres bild (praktisch ist als dateiname die ID zu nutzen)

    - User
    Tippt Hashcode von Bild in Formularfeld
    Sendet das Formular ab

    - PHP
    Lese die ID aus dem "hidden field" aus
    Suche in der DB nach der ID und überprüfe dabei den Timestamp (z.B. nicht älter als 15 Minuten)
    Wenn gefunden Lösche ID
    Lösche Bild mit ID
    Lösche alle Einträge mit einem zu hohem Timestamp (also z.B. älter als 15 Minuten) - ggf. mit dem Bilderlöschen in Cronjob auslagern
    Verschlüssel den vom User übermittelten Hashcode mit md5 und vergleiche ihn mit dem aus der DB
    => gleich => User ist ein Mensch
    => ungleich => User ist ein Robot oder kann nicht gut lesen ;-)

    Sooo,
    nun hat ein eventueller Angreifer nur die Chance direkt im PHP Script den Hashcode auszulesen, oder von dem Bild.
    => Soweit ich das um die Uhrzeit noch beurteilen kann hast du damit die größtmögliche Sicherheit

    Bezgl deinem Problem, warum es nicht klappt: Keine Ahnung! =)
    Debug dein Script doch mal.
    Lass dir in der index.php den generierten Hashcode ausgeben und vergleich ihn mit dem im "hidden field" und dem der auf dem Bild zu sehen ist. Vllt wird das Bild gecacht!
    Auf der eintragen.php lässt du dir ebenfalls den Hashcode ausgeben und vergleichst ihn mit dem gesendeten.

    Viel Erfolg
    Lucas
  8. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    lucas9991 schrieb:
    Deine Spamschutz ist etwas überflüssig.
    Du legst sozusagen den Haustürschlüssel unter die Türmatte..

    Den Hashcode sollte man Serverseitig und eindeutig abspeichern.
    =>
    - PHP
    Generiere Hashcode
    Schreibe Hashcode mit md5 verschlüsselt mit einer ID und einem Timestamp in DB
    Schreibe ID in das "hidden field"
    Generiere temporäres bild (praktisch ist als dateiname die ID zu nutzen)

    - User
    Tippt Hashcode von Bild in Formularfeld
    Sendet das Formular ab

    - PHP
    Lese die ID aus dem "hidden field" aus
    Suche in der DB nach der ID und überprüfe dabei den Timestamp (z.B. nicht älter als 15 Minuten)
    Wenn gefunden Lösche ID
    Lösche Bild mit ID
    Lösche alle Einträge mit einem zu hohem Timestamp (also z.B. älter als 15 Minuten) - ggf. mit dem Bilderlöschen in Cronjob auslagern
    Verschlüssel den vom User übermittelten Hashcode mit md5 und vergleiche ihn mit dem aus der DB
    => gleich => User ist ein Mensch
    => ungleich => User ist ein Robot oder kann nicht gut lesen ;-)

    Sooo,
    nun hat ein eventueller Angreifer nur die Chance direkt im PHP Script den Hashcode auszulesen, oder von dem Bild.
    => Soweit ich das um die Uhrzeit noch beurteilen kann hast du damit die größtmögliche Sicherheit

    Bezgl deinem Problem, warum es nicht klappt: Keine Ahnung! =)
    Debug dein Script doch mal.
    Lass dir in der index.php den generierten Hashcode ausgeben und vergleich ihn mit dem im "hidden field" und dem der auf dem Bild zu sehen ist. Vllt wird das Bild gecacht!
    Auf der eintragen.php lässt du dir ebenfalls den Hashcode ausgeben und vergleichst ihn mit dem gesendeten.

    Viel Erfolg
    Lucas


    Kannst du mir helfen, sowas zu machen?
    Ich versteh das nicht so ganz :)
  9. Warum so kompliziert mit Datenbank, CronJobs und Bilddateien für jedes einzelne Captcha? Auf der Seite stoppt-den-spam.info gibt es ein ganz gutes Tutorial, wie man Gästebücher über SESSION Captchas schützt.

    http://www.stoppt-den-spam.info/webmaster/captcha-tutorial/index.html

    Beitrag zuletzt geändert: 21.3.2010 10:00:15 von rnitsche
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!