Formmailer-Spam-Missbrauch – wie verhindern?

Nach dem Artikel Formmailer vor Spam-Missbrauch schützen von Dirk

… Um einen Formmailer zu missbrauchen, muss man eine “E-Mail Injection” machen. Dazu versucht man ganz einfach weitere Header-Informationen in die E-Mail zu schmuggeln.
Einzelne Header-Zeilen werden ja durch Zeilenumbrüche voneinander getrennt, also lassen sich weitere Header-Informationen einfach mit zusätzlichen Zeilenumbrüchen einschleusen. Ein typischer Formmailer besteht aus den Feldern Betreff, Name des Absenders, der Absender-Mail und natürlich dem eigentlichen Text. Um jetzt neben der Absender-Mail noch eine Kopie zu verschicken, braucht man das Formular nur mit dem Header Field cc: oder bcc: “vergiften”. Statt “the_new_strangeness@yahoo.de” gebe man also “the_new_strangeness@yahoo.de\ncc:nospam@gmx.net” ein. Dadurch hat man eine Kopie an die E-Mail-Adresse nospam@gmx.net geschickt…

habe ich den Test mal auf meinem Kontakt-Form durchgeführt und bin erleichter, denn bei mir geht dieser Formmailer-Spam-Missbrauch nicht.

Natürlich habe ich gleich mal nachgesehen, was ich denn damals programmiert habe, warum dieser Verfahren bei den von mir verwendeten Fomularen erst gar nicht angewenden werden kann.

Die Lösung liegt in einer PHP-Funktion, die prüft, ob eine eMail im Absender (nur dort könnt ein Inject statt finden, da nur Name, eMail und Mail-Text abgefragt werden) überhaupt korrekt sein kann:

function checkMail($email) {
$patter = “!^[a-z0-9]+[\w\.-]+@[a-z0-9]+[\w\.-]+\.[a-z]{2,4}$!i”;
if(preg_match($patter, $email)) {
return true;
} else {
return false;
}
}

Eine Übergabe von einer Absender-email ala “irgendwas@absender.de\ncc:mein.name@web.de” liefert automatisch ein false und führt so zur Nachfrage des Form beim Absender.

Doch wie gut, das ich auch den Test mit dem Namens-Feld durchgeführt habe, denn es kam der Schock: Die eMail ging durch! Ich wäre nicht auf die Idee gekommen, das der Absender-Name, den ich ins Subject mit einbinde, so Missbraucht werden könnte. Nun bastel ich eine entsprechende Regel für den Absendernamen…

Klasse Beitrag Dirk!

Nachtrag: Es ist doch nicht möglich ;-) und ich sollte solche Test vielleicht nicht mehr mitten in der Nacht machen… Hätte der Test geklappt, dann hätte ich schliesslich 3 eMails (eigentliche Mail, Absender-Copy und Inject-Mail) bekommen müssen, es waren aber nur 2. Nichts desto trotz habe ich mal alle Kontakt-Formular darauf hin geprüft und kann nun wieder “entspannt” schlafen…

3 Antworten auf „Formmailer-Spam-Missbrauch – wie verhindern?“

  1. Hochaktuell! In den letzten Tagen wird bei einer Reihe meiner Kundschaft ganz genau diese Masche versucht. Allerdings sind die meisten Scripte nicht in php sondern in PERL geschrieben, das Grundübel ist immer das Gleiche.

  2. Danke, klasse Beitrag, meinen Kunden ging es auch so. Ich probiere es gleichmal aus. Danke nochmals an den Author. MFG

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert