dedlfix: Kontaktformular versenden

Beitrag lesen

Tach!

$versenden = mail($empfaenger, $betreff, $text, "From: ".$email."\nContent-Type: text/html; charset=iso-8859-1\n");
Gratulation zur Header-Injection - PHP sicher die mail()-Funktion nicht automatisch ab - das steht implizit so auch in der Dokumentation (sprich: to, subject und message müssen entsprechend behandelt werden).

Das konnte ich der verlinkten Seite nicht entnehmen. Auch im englischen Original finde ich diese Information nicht. Nach meinen Code-Recherchen von vor einiger Zeit stimmt diese Aussage auch nicht (außer für mittlerweile total veraltete PHP-Versionen). Die Felder to und subject werden gegen Header-Injection in der Form gesichert, dass Steuerzeichen durch Leerzeichen ausgetauscht werden. Damit ist Header-Injection in der Form nicht mehr möglich. Das Feld message kommt hingegen mit dem Header gar nicht mehr in Berührung. Dort ist lediglich der Kontext der Message selbst zu beachten, also bei Plaintext-Mail nichts weiter und bei HTML die üblichen HTML-eigenen Zeichen.

Selbst beachtet werden müssen allerdings die additional_headers. Dort werden keine Zeichen herausgefiltert, weil das auch die gewollte Funktionalität verhindern würde. (Bleibt noch additional_parameters, das muss individuell entschieden werden, wenn man es denn verwendet.)

$firmenname = $_POST["firmenname"];
mit aufnehmen und das ganze dann in den Absendebefehl anhängen?

Das Umkopieren in einfache Variablen ist sinnfrei. Wichtiger ist die Beachtung des Kontextwechsels beim Einfügen in das jeweilige Ziel.

Sicher kannst du das - in erster Linie solltest du dich aber um deine signifikante Sicherheitslücke kümmern und folgenden Artikel verinnerlichen:
http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

Da gibt es auch (in der Fortsetzung) einen Abschnitt zur Email. Die signifikante Sicherheitslücke findet sich aber in seinem Fall "nur" beim Einfügen des From-Wertes. Wie der HTML-Teil zusammengebaut wird, und ob da Lücken drin sind, ist in seinem Posting nicht zu sehen.

dedlfix.