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

Formular Spamschutz durch Zeitabfrage

SirROG

Mitglied
Hallo ich bin gerade an einem Zeitspam Schutz in meinem Kommentarformular am einbauen.
Im Chrom funktioniert diese Methode auch prima nur im Internet Explorer und im Firefox wird die Zeit bei einem erneuten Aufruf der Seite (also nicht Refrech F5) sondern wenn z.B auf eine andere Seite gegangen wird und dann wieder auf die Seite mit dem Kommentarformular gesprungen wird, wird die Zeit im Input Feld
HTML:
<input name="posttime" type="hidden" value="', time(), '" />
nicht mehr nachgetragen sondern es bleibt die alte vom ersten Aufruf.

Habe diese Methode nun in diversen Beispielen mit der Google Suche gefunden aber nirgends zu diesem Problem einen Hinweis gefunden.

Hier mein Kommentarformular Code inkl. allen Spam verhinderungs Methoden.
PHP:
<?php
$kommentarestatus = undefiniert;
?>
<!DOCTYPE html>
<html lang="de-ch">
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<meta name="viewport" content="width=device-width, initial-scale=no, user-scalable=yes">
<meta content="ROG Innovation" name="author">
<style type="text/css">
/*Spamschutz unsichtbares Feld für die Formulare*/
.unsichtbar {display:none;}
</style>
<title>Formular</title>
</head>
<body>

<a name="sprungmarke_kommentare"></a>

<h2>Kommentare</h2>

<?php
// Eintragen (sent) wurde gerückt
if(isset($_POST['sent']))
{
// Daten von Formular übernehmen und eMail Daten konfigurieren
$timezone = 'Europe/Berlin';
date_default_timezone_set($timezone);
$hompage = htmlspecialchars($_POST["hompage"]); // spamschutz
$url = htmlspecialchars($_POST["url"]); // spamschutz
$email = htmlspecialchars($_POST["email"]); // spamschutz
$terms = htmlspecialchars($_POST["terms"]); // spamschutz
$name = htmlspecialchars($_POST["name"]);
$kommentar = htmlspecialchars($_POST["kommentar"]);
$empfaenger = "[email protected]";
$betreff = "Neuer Kommentar auf ROG Innovation vom ".date("d.m.Y - H:i");

$emailtext = $name. "<br><br>". $kommentar. "<br><br> maincategory: ". $maincategory. "<br>subcategory: ". $subcategory. "<br>subsubcategory: ". $subsubcategory. "<br>page: ". $page;

// Daten überprüfen

// Zeit wurde gesetzt und enthält einen numerischen String
if (isset($_POST['posttime']) && is_numeric($_POST['posttime']))
    {
    $posttime = intval($_POST['posttime']);
    $verstrichenesendezeit = (time() - $posttime);
   
    echo "<br><br>Time:". time(). " posttime:". $posttime. " verstrichnezeit:". $verstrichenesendezeit;
   
    // verstrichne Zeit seit Formularseite geladen wurde muss grösser als 5 Sec. und kleiner als 6h sein
    if ($verstrichenesendezeit > 5 && $verstrichenesendezeit < 21600)
        {
            if($url=="" && $hompage=="" && $email=="" && $name!="" && $kommentar!=""  && !isset($_POST["terms"]))
                {
                $kommentarestatus = erfolg;
                echo'<div style="color: #009900;"><h2>Erfolgreich eingetragen</h2></div>
                Vielen Dank für Deinen Kommentar :)<br><br>';
                }
            else
                {
                $kommentarestatus = fehler;
                echo'<div style="color: red;"><h2>Fehler 1</h2></div>
                Bitte alle Pflichtfelder ausfüllen - Danke.<br><br>';
                }
        }
    else
        {
        $kommentarestatus = fehler;
        echo'<div style="color: red;"><h2>Fehler 2</h2></div>';
        echo "Gerade wurde der Kommentar in $verstrichenesendezeit Sek. zugespammt";
        }
    }
else
    {
    $kommentarestatus = fehler;
    echo "kein numerischer string";
    echo'<div style="color: red;"><h2>Fehler 3</h2></div>';
    }
}
?>

<?php
/* Kommentare Formular anzeigen*/

if( $kommentarestatus != "erfolg" )
    {
    echo '<br>Hier können sowohl Fragen wie auch ein Feedback zum oben stehenden Artikel eingetragen werden.<br><br>';

    echo '<form action="';
    echo $_SERVER['PHP_SELF'];
    echo '#sprungmarke_kommentare" metheod="POST" name="kommentarformular">';

    echo '
    <input name="posttime" type="hidden" value="', time(), '" /><input class="unsichtbar" name="hompage"type="text"> <input class="unsichtbar" name="url" type="url"> <input class="unsichtbar" name="email" type="email">
       <span style="color: red;">*</span>Name:<br>
        <input required="required" class="eingabefeld" name="name" type="text"><br>
        <br>
        <span style="color: red;">*</span>Kommentar:<br>
       <textarea required="required" class="eingabefeld" rows="7" name="kommentar"></textarea><br>
        <br>
       <span class="unsichtbar">Terms:</span>
       <input class="unsichtbar" type="checkbox" name="terms">
       <input formmethod="post" value="Eintragen" class="button" name="sent" type="Submit">
        <br>
        <br>
          <br>
         <span style="color: red;">*</span><span style="font-style: italic;">Pflichtfeld</span><br>
    </form>
     ';}
?>
        <br>
        Hinweis:<br>
        Der Eintrag wird nach einer redaktionellen Prüfung in den kommenden Tagen freigeschalten.<br>
    <br>
  </body>
</html>

Hat jemand eine Idee an was es liegen könnte das nicht die aktuelle Zeit gesetzt wird sondern die vom ersten Mal Laden der Seite?
 
Werbung:
Vielen Dank threadi!

Denke dies trifft es so ziemlich - Haha schon komisch das in den Tutorials im Web nirgends etwas davon erwähnt wurde.

Also den gesamten Browser-Cache kann man löschen aber kann auch über PHP nur das Eingabe Feld mit der Zeit gelöscht werden also "time()"? Oder funktioniert diese Anti Spam Methode gar ned wirklich und wurde nur aneinander abgeschrieben? xD. Weil so würden zwar die Spam Boots wahrscheinlich davon abgehalten, da sie den Cache deaktiviert haben werden aber ein echter Nutzer würde somit beim ersten Besuch die Zeit im Cache speichern und spätestens nach 6h könnte er auch keinen Kommentar mehr posten, da er ausserhalb der erlaubten Zeit liegen würde.
 
Werbung:
Statt eines Hiddenfields würde ich mit Sessions arbeiten. Zu dem würde ich noch ein Honeypot (google hilft) einbauen, um Bots besser aussperren zu können.
 
Vielen Dank für deinen Kommentar, das hab ich zusätzlich auch noch vor. Muss zu den Sessions erst mal paar Tutorials durcharbeiten und mich da einarbeiten und die Servereinstellungen dazu abklären ;)

Meine Frage wurde mit deinem Post jedoch noch nicht ganz beantwortet xD und zwar ob es möglich ist den Cach im Browser vom Zeitstempelfeld irgendwie zurück oder auf die aktuelle Zeit zu setzen?
 
Werbung:
Zurück
Oben