Hi!
mail($recipient, $subject, $message);
... $name und $email landen im Nachrichtentext. Für eine Header-Injection eignet sich nur der hier nicht genutzte vierte Parameter von mail().
nein, ebensogut der erste (hier $recipient), der in Phils Beispiel auch nur durch direktes Umkopieren aus $_GET['recipient'] gebildet wird. Folglich kann ich als Nutzer des Formulars sowohl den primären Empfänger frei bestimmen, als auch zusätzliche Header einflechten.
Der zweite Teil ist nicht richtig, meine Aussage bleibt gültig. Steuerzeichen im Parameter $to (hier: $recipient) werden von der Funktion mail() gegen Leerzeichen ausgetauscht. Man kann zwar eine Empfängerliste angeben, aber keine Header-Injection anstellen.
PHP 5.3.3 mail.c Zeilen 132 bis 152, besonders Zeile 141. Es folgt dann die Subject-Behandlung, da werden auf gleiche Weise die Steuerzeichen entschärft. ($message kommt nach den Header-abschließenden doppelten \n und ist somit gar nicht Header-relevant.)
Lass $_GET['recipient'] zum Beispiel den Wert
"me@example.org,you@example.org\r\nspam1@other.@example.org,spam2@yetanother.example.org"
haben ...
Dann wird er als "me@example.org,you@example.org spam1@other.@example.org,spam2@yetanother.example.org" in das To:-Feld eingefügt.
Lo!