Frage zu Kontaktformular

Hallo Leute,

eine Frage zu meinen Kontatkformular mit Spamschutz… bin fast schon am verzweifeln!

Das Kontaktformular wird über die „index.php“ … so nach dem Schema
www.testseite.de/?do=kontakt“ includet!

Das klappt auch soweit … das Kontaktformular funktioniert auch…
aber … ja … jetzt kommt das aber! Nach dem „senden“ werden
die Formularfelder nicht gelöscht … obwohl ich „unset“ nutze???

Hat vielleicht jemand eine Idee???

Anbei das PHP-Script…

Gruß, Andi

<?php // error_reporting(0);
$zahl1 = mt\_rand(1,9); $zahl2 = mt\_rand(1,9); $summe = $zahl1 + $zahl2; echo "\n";
echo "\n";
echo " \n";
echo " Name:\n";
echo " \n";
echo "  ";

if ((isset($_POST["senden"])) && (empty($_POST["form_name"]))) { echo "Bitte Name eingeben!"; }

echo "\n";
echo " \n";
echo " \n";
echo " eMail:\n";
echo " \n";
echo "  ";

if ((isset($_POST["senden"])) && (empty($_POST["form_email"]))) { echo "Bitte eMail-Adresse eingeben!"; }
if ((isset($_POST["senden"])) && (!empty($_POST["form_email"])))
{
if (!eregi("[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4})",$_POST['form_email']))
{
echo "Bitte eMail-Adresse eingeben!";
}
}

echo "\n";
echo " \n";
echo " \n";
echo " Nachricht: \n";
echo " ".$_POST["form_nachricht"]."\n";
echo "  ";

if ((isset($_POST["senden"])) && (empty($_POST["form_nachricht"]))) { echo "Bitte Nachricht eingeben!"; }

echo "\n";
echo " \n";
echo " \n";
echo " Spamschutz: \n";
echo " ".$zahl1." + ".$zahl2." = \n";
echo "  ";

if ((isset($_POST["senden"])) && (empty($_POST["form_spamschutz"]))) { echo "Bitte Ergebnis eingeben!"; }

echo "\n";
echo " \n";
echo " \n";
echo "  \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo "\n";
echo "\n";

if ((isset($_POST["senden"])) && (!empty($_POST["form_name"])) &&
(!empty($_POST["form_email"])) && (!empty($_POST["form_nachricht"])) &&
($form_spamschutz == $spamschutz))
{

// eMail versenden!

unset ($_POST["form_name"]);
unset ($_POST["form_email"]);
unset ($_POST["form_nachricht"]);
unset ($_POST["form_spamschutz"]);
unset ($_POST["spamschutz"]);

echo "
Ihre Mitteilung wurde erfolgreich versendet!";

};

?>

Hallo

Also zum Fomular-löschen:

Du hast in deinem Script die Reihenfolge:
-Formular erstellen und Variablen eintragen
-Wenn möglich Email senden
-Variablen löschen

Du musst es aber so machen:
-Wenn möglich Email senden
-Falls Email gesendet Variablen leeren (nicht löschen)
-Formular erstellen und Variablen eintragen

Oder anders ausgedrückt: Wenn das Formular erst mal geschrieben ist, nützt das Variablenlöschen auch nichts mehr.

Und nun zur Spamsicherheit:
In deinem Script gibt es drei Probleme:

  • Die Aufgabe muss für einen Computer schwer zu lösen sein. Stelle die Zahl deshalb als Zahlwort (auch nicht sicher) oder noch besser als Bild oder Sprache dar.

  • Die Lösung darf nicht im HTML-Code auftauchen. Du könntest sie beispielsweise verschlüsselt in das hidden-Feld schreiben und beim Auswerten die Benutzereingabe auf die gleiche Weise verschlüsseln und dann vergleichen

  • Die Lösung muss nach dem Absenden ungültig werden. Das heißt: Wenn das Formular ein zweites mal mit gleicher Lösung und gleichem hidden-Feld abgesendet wird, wird keine Mail gesendet. Um das hinzukriegen musst du in einer Datei oder Datenbank auf dem Server speichern, welche Lösungen zur Zeit gültig sind.

Grundsätzlich sollte man bedenken: Wenn einer effektiv spammen will, nutzt er ein Script. Und dieses Script hat keine Probleme damit, hidden-Felder zu lesen oder zu verändern, Felder ganz wegzulassen oder neue hinzuzufügen.

Und zuletzt noch: Falls du den Befehl mail() verwendest, schau dir auch die Sicherheitshinweise in [FAQ:2435], Abschnitt mail() an.

Gruß Johannes

Hallo Johannes,

danke für die schnelle Antwort!

Kennst Du vielleicht ein Script - wo so programmiert ist?

Wäre super!

Danke, Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]