Und wie wäre es mit: ursprüngliche Mail-Funktion durch eine eigene mit identischer Signatur ersetzen?
Mein Erfahrung ist, am besten ersetzt man den Header-String durch ein Array.
In der Art:
boolean mail(array $rec,string $sub,string $txt,array $head);
$rec = numerisches Datenfeld mit Liste der Empfänger
$head = assoziatives Datenfeld des Headers
Beispiel:
$head {
"from" => "a@domain.tld";
"content-type" => "text/plain";
}
Mit dieser einfach gestrickten Änderung erkennt man Header-Injection Angriffe sehr einfach:
$head {
"from" => "a@domain.tld\nbcc:spamopfer@domain.tld";
}
Ganz logisch: das "bcc"-Feld gehört da nicht hin. An der Syntax erkennt man den Angriff sofort und kann Abhilfe schaffen.
foreach ($head as $key => $value) {
$head[$key] = preg_replace('/(.*)\n.*/U', "\\1", $value);
} |