Moin!
ich glaube ich verstehe etwas nicht. Wenn die Postdaten mittels stripslashes "bearbeitet" werden, wird dann aus \r\n nicht automatisch
rn?
Du bist hier, und nach dir auch alle anderen wie Ashura, AllesMeins, vollkommen auf dem falschen Dampfer.
Die Schreibweise \r\n ist eine Ersatzschreibweise, um die zwei ASCII-Zeichen CR (Carriage Return, Bytewert 13) und LF (Linefeed, Bytewert 10) auf komfortable Weise in Programmcode in Strings integrieren zu können.
Diese Schreibweise funktioniert nur direkt in den Skripten, also wenn du einen festen String im Code hast, der eines oder beide dieser zwei Zeichen ausgeben soll - beispielsweise, weil ein Zeilenumbruch gemeint ist.
Der Parser übersetzt den String dann schon direkt in die zugehörigen Bytewerte.
Und auch wenn Mailskripte angegriffen werden, werden direkt diese Bytewerte gesendet, und nicht die zwei Zeichen "Backslash" und "Buchstabe r" oder "Buchstabe n" - denn der Backslash wäre dann tatsächlich "Opfer" der addslashes-Operation.
Deshalb gehen deine weiteren Vermutungen, und auch alle der ab diesem Zeitpunkt mitdiskutierenden Stammposter, leider vollkommen in die falsche Richtung, weil sie von Tatsachen ausgehen, die nicht stimmen.
Wieso müßte man dann noch wie Du es machst alle einzeiligen input's auf \r\n prüfen?
PHP und Perl wissen von irgendwelchen Formularfeldern nichts, wenn sie die GET-Parameter bzw. den POST-Body auseinandernehmen. Abgesehen davon kann man diesen auch durch eigene Skripte, die "passende" Daten senden, manipulieren. Der simpelste Trick wäre, einfach ein <input type="text"> durch eine Textarea zu ersetzen - und schon kann man mehrzeilige Absenderangaben sogar manuell im Browser ausprobieren und sehen, was passiert. Für die GET- oder POST-Daten ist das egal - die haben an den entsprechenden Stellen dann halt ein passendes Steuerzeichen (CR, LF, CR+LF) für "Zeilenumbruch" im String.
Und weil das an der falschen Stelle gefährlich ist, muß man sicherstellen, dass es nicht durchflutscht.
Könnte man nicht auch mittels preg- oder string replace "\r\nBCC" durch "" ersetzen und gut ist's?
Es wäre sinnvoll, alle Vorkommen von CR und LF durch "nichts" zu ersetzen. Dann sind derartige Hinzufügungen ziemlich sicher ausgeschlossen. Allerdings kann man das nicht grundsätzlich für alle Formulardaten machen, da einige Textteile ja als "Text mit Zeilenumbrüchen" für den eigentlichen Mailtext vorgesehen sind - und auch unbearbeitet direkt übernommen werden dürfen, ohne Gefahr zu bergen.
Außerdem, bei Eingabe eines BCC in eine Textarea- damit könnte man nicht spammen? Wieso nicht?
Doch, kann man. Auf den Typ des Formularfeldes kommt es nicht an, das sind zur Verarbeitungszeit alles nur noch Strings mit Inhalt - und auf den Inhalt kommt es an.
- Sven Rautenberg
--
My sssignature, my preciousssss!