rasputin
Lounge-Member
dieses tutorial setzt grundlegende kenntnisse über php und sessions voraus.
spammer haben bekanntermassen eine neuere art gefunden um mails zu verschicken: übers kontaktformular.
dies wird mit diesem script unterbunden. gleichzeitig wird ein mehrmaliges verschicken der nachricht durch einen reload verhindert. das ganze funktioniert auch bei deaktivierten cookies beim client.
das ganze funktioniert folgendermassen: beim aufruf der kontaktseite wird eine id generiert, in der session gespeichert und ins formular eingetragen (hidden). vor dem versenden des mails wird nun geprüft, (1) ist eine id in der session gespeichert, (2) ob eine id übermittelt wurde, (3) ist die übermittelte id diejenige, die vorher gespeichert wurde. wenn alle drei bedingungen zutreffen, wird das mail verschickt.
spammer haben bekanntermassen eine neuere art gefunden um mails zu verschicken: übers kontaktformular.
dies wird mit diesem script unterbunden. gleichzeitig wird ein mehrmaliges verschicken der nachricht durch einen reload verhindert. das ganze funktioniert auch bei deaktivierten cookies beim client.
das ganze funktioniert folgendermassen: beim aufruf der kontaktseite wird eine id generiert, in der session gespeichert und ins formular eingetragen (hidden). vor dem versenden des mails wird nun geprüft, (1) ist eine id in der session gespeichert, (2) ob eine id übermittelt wurde, (3) ist die übermittelte id diejenige, die vorher gespeichert wurde. wenn alle drei bedingungen zutreffen, wird das mail verschickt.
PHP:
$danke = "";
$error = "";
if (isset($_POST['contactform_antispam']) && isset($_SESSION['contactform_antispam']) && $_SESSION['contactform_antispam'] == $_POST['contactform_antispam']) {
if ($name == "") {
$error = "<p><strong>Sie haben Ihren Namen nicht angegeben.</strong></p>";
} elseif (strpos($email, "@") === false) {
$error = "<p><strong>Bitte geben Sie eine gültige Email-Adresse an.</strong></p>";
} elseif ($bemerkung == "") {
$error = "<p><strong>Bitte schreiben Sie eine Nachricht.</strong></p>";
} else { // alles korrekt
require_once "./_include/emails.php";
eval("\$message = \"{$_email['kontakt']['message']}\";");
mail(...);
$danke = "<p><strong>Vielen Dank für Ihr Feedback!</strong></p>";
}
} elseif (isset($_POST['kontakt_bemerkung'])) {
// spam abfangen, ip an mich übermitteln
mail(...);
}
$_SESSION['contactform_antispam'] = md5(time().$_SERVER['REMOTE_ADDR']); // hash speichern bei jedem aufruf der seite
/****************************************************/
// im formular weiter unten
<?php
echo $danke, $error;
echo '<input type="hidden" name="contactform_antispam" value="'.$_SESSION['contactform_antispam'].'" /> <input type="hidden" name="'.session_name().'" value="'.session_id().'" />';
?>
Zuletzt bearbeitet: