Moin!
Vor kurzem hatte ich gefragt, ob eine simple PHP-Funktion zum Versenden von Emails sicher sei. Ich bin gerade noch einmal an dem Problem dran und habe so eben eine ganz praktische Funktion aus der mbstring-Bibliothek gefunden: mb_encode_mimeheader. Nach meinen Test werden damit nicht nur die Header Encoding-gerecht codiert, sondern gleich auch noch Header-Injektionen abgefangen.
Das stimmt so nicht. Im Gegenteil wandert der injizierte Header aus meiner Sicht eher in einen Graubereich. Ich habe die RFCs nicht auswendig drauf, von daher ist mir nicht bekannt, ob dieser Bereich spezifiziert wurde, aber letztlich wird der Spamheader nur nett verpackt - aber nicht elimniert.
Ausgabe:
"Robert Bienert" =?US-ASCII?Q?=3Croot=40localhost=3E=0D=0ABCC=3A=20Spam?=
=?US-ASCII?Q?=40receiver=2Ecom?=
In dem codierten String tauchen =0D=0A auf, das ist der Zeilenumbruch. Mails sind ein ziemlich fragiles und simples System, jede Mail ist praktisch als Textdatei zu betrachten, die einigen Konventionen genügen muß, damit die beteiligten verarbeitenden Komponenten den Text parsen können.
Die Frage ist also: Was greift zuerst? Das Auseinanderpflücken der Header, oder das Dekodieren von codierten Passagen?
Wenn letzteres, dann taucht der Zeilenumbruch und der Spamheader unversehrt wieder auf und wird dann geparst - nix mit Unschädlichkeit!
Und da man, unabhängig von einer möglichen Spezifikation nicht davon ausgehen kann, dass alle Software das "richtig" macht, würde ich mich auch nie auf solch einen Zweifelsfall verlassen.
Deshalb gibt es nur eins:
Header-Injection kann nur dadurch verhindert werden, dass ein einzelner Headerinhalt keinerlei Zeilenumbrüche enthält - und zwar schon nicht in seinen Rohdaten. Ob der Versuch mit Abbruch oder Entschärfung (ersetzen durch Leerzeichen) bestraft wird, ist Abwägungssache je nach Anwendung.
Danach ist selbstverständlich das Encoding in passender Form erforderlich, da heutzutage mutmaßlich der UTF-8-Zeichenbereich in vielen Namen Verwendung findet.
- Sven Rautenberg
--
"Love your nation - respect the others."