Mail-Formulare auf Webseiten mit PHP absichern
Immer noch gibt es Webseiten, die unsichere PHP-Formulare oder veraltete (englisch: "deprecated") Technologien einsetzen. Erst letztens (Oktober 2009) ist mir ein Projekt untergekommen, bei dem noch die veralteten HTTP_SERVER_VARS benutzt wurden. Man trifft leider auch immer wieder auf PHP-Skripte, die für Spam missbraucht werden können.
// UNSICHER NICHT BENUTZEN! if (mail('vorname.nachname@deine-domain.tld', 'PHP-Mail (gesendet: ' . date('Y-m-d H:i:s') . ')', 'Dies ist eine Testnachricht. Es wird der PHP-Befehl "mail()" verwendet.', 'From: ' . $_POST['mail_address'])) { echo 'E-Mail wurde erfolgreich versendet.'; } else { echo 'E-Mail konnte NICHT versendet werden.'; }
Der c't-Artikel "Versandkontrolle" erklärt sehr gut, wie man Gefahren bei Mail-Skripten umgehen kann. Die PHP-Skripte können auch als ZIP heruntergeladen werden. Einige Techniken werden ich hier genauer erläutern.
reguläre Ausdrücke für Sicherheitsprüfungen
Ich arbeite mit der Mail-Klasse Swift-Mailer. Nur wenn die Mail-Adresse syntaktisch richtig ist und keine wikipedia:E-Mail-Injection versucht wird, nur dann wird die Mail CC an den Benutzer gesendet.
if (preg_match('/[a-zA-Z0-9_\\.-]+@[a-zA-Z0-9_\\.-]+/', $mail)) { $nachricht->addCc($mail); }
Prüfung der MX-Records mit "getmxrr()"
In Arbeit ...
<pre><?php define('MAIL_ADDRESS', 'root@creartepublicidad.ran.es'); $get_mx_record = getmxrr(substr(strstr(MAIL_ADDRESS, '@'), 1), $mx_hosts); if ($get_mx_record) { echo "IF = TRUE, 'getmxrr()' successfull.\n"; var_dump($mx_hosts); } else { echo "IF = FALSE, 'getmxrr()' FAILED.\n"; var_dump($mx_hosts); } ?></pre>


News
