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'[email protected]', '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', '[email protected]'; $get_mx_record = getmxrrsubstrstrstrMAIL_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>