Variablen im Mail-Body quoting / escaping

9

Ich fühle mich etwas peinlich, weil ich einen Mail-Körper mit PHP erzeuge, ohne die Variablen zu umgehen. In HTML verwende ich htmlspecialchars () oder ähnliche Funktionen, für Befehlszeilen escapeshellarg (), aber für Mails? Zum Beispiel so etwas:

%Vor%

Was könnte ein möglicher Angreifer mit einem Skript wie dem obigen tun und wie könnte ich mich vor einem solchen Angriff schützen? Oder ist PHP mail () gespeichert und warum?

Aktualisieren

Siehe das Beispiel:

  • Nur der Körper ist betroffen (keine Header!)
  • Content-Type ist text / plain
  • Ein Beweis für die Antwort wäre nett
  • MTA ist ein Postfix sendmail mit "/ usr / sbin / sendmail -t -i"
Trendfischer 17.04.2013, 12:07
quelle

4 Antworten

3

Der grundlegende E-Mail-Nachrichtentext ist reiner Text. Wenn Sie einen anderen Typ wie HTML oder eine mehrteilige Nachricht verwenden möchten, müssen Sie die MIME-Erweiterung verwenden und den Typ entsprechend mit Inhaltstyp angeben (z. B. text/html für HTML oder multipart/… für einen mehrteiligen Text) Nachricht).

Aus Sicherheitsgründen gibt es keine Möglichkeit, etwas Schädliches zu injizieren (zumindest nicht laut Spezifikation). Selbst Nicht-ASCII-Zeichen sollten trotz der fehlenden Deklaration der verwendeten Zeichencodierung korrekt behandelt werden.

Allerdings kann es immer noch einige Fehler in E-Mail-Clients geben, die auf diese Weise ausgenutzt werden können. Aber ich bezweifle das.

    
Gumbo 17.04.2013 16:27
quelle
0

Es ist nicht gegen XSS atack gesichert, denn wenn Ihre E-Mail HTML enthält, kann jemand sie in E-Mails einfügen.

Das gute Verhalten besteht darin, gültige Daten zu prüfen und zu validieren. Wenn ich du wäre, würde ich dieser Schnur entkommen. Es kostet fast nichts und man muss sich keine Sorgen machen, dass es nicht benutzt wird.

    
Robert 17.04.2013 12:10
quelle
0

Gute Frage. Ich glaube nicht, dass Sie den Fließtext umgehen müssen, aber ich weiß, dass es möglich ist, Kopfzeilen zu einer Mail hinzuzufügen (wie ein BCC zu Tausenden von Adressen), wenn Sie dem Benutzer erlauben, eine von Adresse einzugeben. Also, wenn Sie Variablen in diese setzen, überprüfen Sie auf jeden Fall Newlines ( \n und \r ), um sicherzustellen, dass keine zusätzlichen Header hinzugefügt werden.

    
Rijk 17.04.2013 12:11
quelle
0

Denken Sie so an den Text der E-Mail: "Mission top secret destination unbekannt". Wir wissen vielleicht nicht, welche Art von Client die Nachricht lesen wird, aber wir können vermuten, dass wir nicht wollen, dass Live, user-unescaped HTML in ihm auftaucht. Da viele Clients E-Mails in HTML lesen, wäre es am besten, wenn Sie htmlentities() auf den vom Benutzer angegebenen E-Mail-Text legen.

Eine Methode aus meiner Escape-Klasse.

%Vor%

========================================

Betrachten Sie mindestens so etwas und mehr bei Ihrer Recherche.

%Vor%     
Anthony Rutledge 30.04.2015 17:39
quelle