echo $begrüßung;
$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// zusätzliche Header
$header .= 'To: Simone simone@example.com, Andreas andreas@example.com' . "\r\n";
$header .= 'From: Geburtstags-Erinnerungen geburtstag@example.com' . "\r\n";$header= preg_replace('=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\n|\r)\S).*=i', "", $header);
> sollte den Header absichern, auch mail to und den Betreff?
Nein, so wird das nichts. Du sollst nicht vom gesamten Header die Zeilenumbrüche entfernen, sondern nur darauf achten, dass keine Zeilenumbrüche in Werten sind, die in eine der Header-Zeilen eingefügt werden sollen. Man kann, wenn man Zeilenumbrüche in diesen (vom Benutzer stammenden) Werten feststellt, die Verarbeitung im Prinzip grußlos abbrechen. Denn mit ziemlich hoher Wahrscheinlichkeit hat da ein Automat versucht, Lücken auszunutzen. Den interessieren dann auch keine Fehlermeldungstexte.
Das Suchmuster deines Regulären Ausdrucks sieht abenteuerlich aus. Es versucht diverse harmlose Zeichenfolgen oder \n oder \r zu finden, die von einem Nicht-Whitespace-Zeichen und beliebigen anderen gefolgt werden zu ersetzen. Wenn jemand Email-Header-Injection versucht, wird auch der erste Wert vor dem Zeilenumbruch sicher nichts gewünschtes sein. Es sollte also reichen, mit einer einfachen Stringsuche nach \r und \n zu suchen.
if (strpos($value, "\n") !== false or strpos($value, "\r") !== false)
exit;
> %0A ist die Hexadezimale Schreibweise für ein Linefeed LF
> %0D ist die Hexadezimale Schreibweise für ein Cariage Return CR
> Warum aber auch noch CA und LF uind für was Hexadezimal?
Sowohl im PHP-String-Kontext als auch im PCRE-RegExp-Kontext und im mail()-Kontext sind das alles nur Zeichen ohne besondere Bedeutung.
> Meine nächste Frage, im Inhalt kann ich das nicht nutzen, Für den Inhalt wäre es besser
Der Inhalt ist harmlos. In dem kann alles stehen.
echo "$verabschiedung $name";