php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 06-07-2012, 10:08
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard Mail Versand - Zeilenlänge & Injection Frage

Warum sollte die Zeilenlänge nicht größer als 70 sein?
Aufgrund der hohen Komplexität der E-Mail Syntax aufgrund der IDNs würde ich gerne auf eine E-Mail Validierung verzichten, doch wie sieht es dann bzgl. E-Mail-Header-Injection aus?

In der Beschreibung von SwiftMailer wird erwähnt, dass es sicher gegenüber solchen Angriffen ist, da alle nicht-ASCII-Zeichen umgewandelt würden, ist das so?

Gehört \r und \n nicht zu ASCII, also ist '\' + 'n' nicht das Gleiche wie '\n' (weil '\' und 'n' in ASCII enthalten sind)?
Mit Zitat antworten
  #2 (permalink)  
Alt 06-07-2012, 12:01
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

Zitat:
Zitat von einermeiner Beitrag anzeigen
Warum sollte die Zeilenlänge nicht größer als 70 sein?
Empfohlen sind 78 Zeichen, da E-Mails früher auf textbasierten Systemen gelesen wurden. Da hatte man noch zwei Stellen frei, um mit Grafikzeichen einen Fensterrahmen drum zu machen, bis man an die 80-Zeichen-Grenze der Konsole anstieß.

Diese Grenze wurde inoffiziell nach unten gedrückt, um bei Mehrfachzitaten die sogenannten Kammzitate zu vermeiden.

Zitat:
Zitat von einermeiner Beitrag anzeigen
Aufgrund der hohen Komplexität der E-Mail Syntax aufgrund der IDNs würde ich gerne auf eine E-Mail Validierung verzichten, doch wie sieht es dann bzgl. E-Mail-Header-Injection aus?
Solange keine Zeilenumbrüche drin sind, könnte man die E-Mail nur ungültig machen und dann wird sie nicht mehr weitergeleitet, also hätte man als Angreifer nichts davon. Wenn du Zeilenumbrüche findest, solltest du sie einfach zu CRLF umwandeln (falls es einzelne CRs oder LFs sind) und durch ein vorangestelltes Leerzeichen maskieren (Linear WhiteSpace).

Zitat:
Zitat von einermeiner Beitrag anzeigen
Gehört \r und \n nicht zu ASCII, also ist '\' + 'n' nicht das Gleiche wie '\n' (weil '\' und 'n' in ASCII enthalten sind)?
CR und LF gehören zu ASCII und werden in C-basierten Sprachen oft durch die Escape-Sequenzen \r und \n dargestellt. Das heißt aber nicht, dass ein \ und ein n auch einen Umbruch darstellt, denn wenn man diese Zeichen einzeln hintereinander in einem PHP-String schreiben würde, sähen sie so aus: "\\n".

Vermutlich soll der Satz von Swiftmailer bedeuten, dass es Zeichen jenseits von 127 (0x7f) maskiert, denn die gehören nicht zu US-ASCII.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 06-07-2012, 14:10
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

Wenn der Empfänger also einen grafischen Mailclienten hat, entstehen keine Probleme, wenn ich eine größere Zeilenlänge nutze?

Zitat von Swift Mailer
Zitat:
No header -- including text headers -- in Swift Mailer is vulnerable to header-injection attacks. Swift Mailer breaks any attempt at header injection by encoding the dangerous data into a non-dangerous form.
Aber selbst in US-ASCII ist doch CR und LF enthalten?

Zitat:
Wenn du Zeilenumbrüche findest, solltest du sie einfach zu CRLF umwandeln (falls es einzelne CRs oder LFs sind) und durch ein vorangestelltes Leerzeichen maskieren (Linear WhiteSpace).
Wie sähe das in Code aus?
Oftmals werden auch hexadezimale Schreibweisen durchsucht, also würde ein einfaches Suchen nach \n und \r nicht reichen (bei vorherigem urldecode())?

Der message-Teil ist nicht anfällig, darf also beliebige Zeichen enthalten oder? (gehört ja nicht zum header)
Mit Zitat antworten
  #4 (permalink)  
Alt 06-07-2012, 14:19
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von einermeiner Beitrag anzeigen
Wenn der Empfänger also einen grafischen Mailclienten hat, entstehen keine Probleme, wenn ich eine größere Zeilenlänge nutze?
Solange sie nicht größer ist als 998, ist es vertretbar. Die 78 sind eine Empfehlung, die 998 eine Bedingung.

Zitat:
Zitat von einermeiner Beitrag anzeigen
Aber selbst in US-ASCII ist doch CR und LF enthalten?
Ja US-ASCII enthält alles von 0x00 bis 0x7f. Alles darüberhinaus ist Extended ASCII bzw. ANSI.

Zitat:
Zitat von einermeiner Beitrag anzeigen
Der message-Teil ist nicht anfällig, darf also beliebige Zeichen enthalten oder? (gehört ja nicht zum header)
Fast. Wenn es eine Multipart-E-Mail ist, darf das Boundary nicht vorkommen. Ansonsten darf bei 8bit-Encoding jedes beliebige Zeichen enthalten sein, bei anderen Encodings muss man sich schon an die entsprechende Codierung halten.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 06-07-2012, 15:09
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Ja US-ASCII enthält alles von 0x00 bis 0x7f.
Deswegen verstehe ich nicht, warum die Kodierung vor der Header Injection schützen soll.

Zitat:
Wenn es eine Multipart-E-Mail ist, darf das Boundary nicht vorkommen.
OK. Wird eine reine HTML Mail, somit muss ich also kein Boundary setzen und es kann nichts passieren.
Mit Zitat antworten
  #6 (permalink)  
Alt 06-07-2012, 15:27
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von einermeiner Beitrag anzeigen
Deswegen verstehe ich nicht, warum die Kodierung vor der Header Injection schützen soll.
Vermutlich weil der Mailer neben dem Codieren von Non-ASCII-Zeichen auch Zeilenumbrüche in LWS umwandelt. Aber du hast damit recht, dass die Codierung alleine nicht vor Injection schützen würde.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 06-07-2012, 16:02
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

Nochmal zu den LWS, wie würde man diese denn in PHP darstellen, also wie kann ich einen String "abc\nxyz" mit dem LWS maskieren und was passiert mit einem solchen maskierten \n, wird es dann beim Client wieder angezeigt als Zeilenumbruch?
Mit Zitat antworten
  #8 (permalink)  
Alt 06-07-2012, 16:40
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Mal grundsätzlich: Wenn du Swiftmailer nimmst, kümmert der sich selbst um solche Sachen. Wenn du es selbst bauen willst, musst du die entsprechenden RFCs lesen. Ich hab die mal gelesen und halte mich für relativ fit, dennoch kann man das alles unmöglich im Kopf behalten.

Und nein, LWS wird zu einem Leerzeichen kollabiert und nicht als Umbruch angezeigt, deshalb heißt es auch Linear WhiteSpace. Wenn du Umbrüche unbedingt von Hand zu LWS machen willst, kannst du
PHP-Code:
preg_replace("`(?<![\\t ])(?:\\n|\\r\\n?)+)`"" \r\n"$text); 
benutzen. Achte aber auf die bekannten Probleme mit UNIX sendmail, welches alle LFs in CRLF umwandelt und damit lauter ungültige CRCRLF-Sequenzen produziert.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 06-07-2012, 18:12
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

Ich habe bei meiner Seite gerade einen solchen Angriff probiert, wenn ich den Code im "From:"-Teil unterbringe, funktioniert die Injection, aber im Subject nicht, warum?
PHP-Code:
<?php 
$receiver 
"";
$receiver2 "";
$from "";
$sub "Betreff\nCc: $receiver";

mail($receiver2$sub'Inhalt'"From: $from"); 
?>
Vertausche ich, $sub und $from, dann funktioniert es.
Mit Zitat antworten
  #10 (permalink)  
Alt 06-07-2012, 18:17
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Weil der Subject-Parameter sozusagen atomar ist und PHP alle nicht erlaubten Zeichen maskiert. Bei den Extra-Headers kann es das nicht, denn man muss ja die Möglichkeit haben, dort mehrere Header anzugeben. Dass du dort nur From benutzt, ist reiner Zufall.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #11 (permalink)  
Alt 06-07-2012, 18:24
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

Also ist der Subject header nicht anfällig für Injection, nur der From header, nachdem ich diverse Internetquellen gelesen hatte, erschien es mir so, als ob es auch mit den anderen funktionieren würde.
Mit Zitat antworten
  #12 (permalink)  
Alt 06-07-2012, 18:34
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Das kann ich dir nicht mit Sicherheit bestätigen. Für ganz simple Versuche mag PHP das abfangen können, aber es gibt ja noch zahlreiche andere Tricks mit gespooften UTF-8-Sequenzen und so. Ich würde mich also nicht blind darauf verlassen, dass der Betreff sauber ist.

Da du den Betreff sowieso behandeln musst, weil er ja gerade auch in unserem Land Sonderzeichen, wie Umlaute oder ß enthalten kann, die allesamt als Encoded-Word übergeben werden müssen, solltest du das auch gleich selbst absichern.

Aber nochmal: Warum nimmst du den Swiftmailer nicht? Meines Wissens ist der doch ganz brauchbar.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #13 (permalink)  
Alt 06-07-2012, 20:33
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

Weil ich ein Framework nutze, das aber keinen eingebauten Mailer hat und die Integration zwar möglich ist, aber mit Aufwand verbunden ist, dachte ich, dass es bei einem so einfachen Mailversand auch schnell selbst implementiert ist...
Muss ich mir dann wohl doch anders überlegen, was nutzt du zum Mailversand?

Im Beispiel 4 auf PHP: mail - Manual sind in der message und im subject Sonderzeichen enthalten, warum funktioniert dort der Versand anscheinend auch ohne Kodierung, was ja alleine schon wegen ISO-8859-1 eigentlich nicht korrekt sein dürfte?

Zitat:
aber es gibt ja noch zahlreiche andere Tricks mit gespooften UTF-8-Sequenzen und so
Hast du dazu einen Link, ich finde immer nur die Standardangriffe.
Mit Zitat antworten
  #14 (permalink)  
Alt 06-07-2012, 20:56
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von einermeiner Beitrag anzeigen
was nutzt du zum Mailversand?
Ich benutze etwas selbst gebautes aus der Zeit, als ich mich mit den E-Mail-RFCs beschäftigt hatte.

Zitat:
Zitat von einermeiner Beitrag anzeigen
Im Beispiel 4 auf PHP: mail - Manual sind in der message und im subject Sonderzeichen enthalten, warum funktioniert dort der Versand anscheinend auch ohne Kodierung, was ja alleine schon wegen ISO-8859-1 eigentlich nicht korrekt sein dürfte?
Hab mir das Beispiel jetzt mindestens viermal angesehen, aber ich kann kein einziges Sonderzeichen entdecken. Was meinst du genau?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #15 (permalink)  
Alt 07-07-2012, 06:31
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
für August
das "ü"
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mail() und die Zeilenlänge mapro Off-Topic Diskussionen 1 15-09-2007 14:04
mail injection trotz magic quotes? subabrain IT-Security 1 08-06-2006 19:29
Problem mit E-Mail-Versand via mail() hasel PHP Developer Forum 11 22-11-2005 13:48
Mail Versand komikaa PHP Developer Forum 12 21-11-2005 14:18
mail Versand Zocker PHP Developer Forum 2 03-08-2005 10:55

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:51 Uhr.