Korrekte Verhinderung der Mail-Injektion in PHP

8

Können Sie mir Ratschläge geben, wie ich die E-Mail-Injektion in PHP mail() verhindern kann, ohne die ursprünglichen Nachrichtendaten zu verlieren? Z.B. Wenn ich dem Benutzer erlauben soll, \r\n , To , CC usw. zu verwenden, möchte ich sie nicht komplett von der Nachricht entfernen - ich möchte sie trotzdem geliefert bekommen, aber ohne zusätzliche Header hinzuzufügen oder irgendwie zuzulassen Mail-Injektion passieren.

Die meisten Ratschläge im Internet schlagen vor, diese Daten vollständig zu entfernen - aber ich möchte das nicht tun.

Ich sende Klartext (nicht HTML) Nachrichten über PHP mail() function.

Was würden Sie empfehlen?

    
Atm 14.08.2012, 12:42
quelle

4 Antworten

7

Um gültige E-Mails für die Verwendung im Empfänger-E-Mail-Feld zu filtern, werfen Sie einen Blick auf filter_var() :

%Vor%

Dies stellt sicher, dass Ihre Benutzer nur einzelne, gültige E-Mails liefern, die Sie dann an die mail() -Funktion übergeben können. Soweit ich weiß, gibt es keine Möglichkeit, Kopfzeilen über den Nachrichtentext mithilfe der PHP mail() -Funktion zu injizieren, so dass Daten keine spezielle Verarbeitung benötigen.

Aktualisierung:

Laut Dokumentation für mail() , wenn es direkt mit einem SMTP-Server kommuniziert , müssen Sie die Vollstopps im Nachrichtentext verhindern:

%Vor%

Update # 2:

Offenbar ist es auch möglich, über das Subjekt zu injizieren, aber da es kein FILTER_VALIDATE_EMAIL_SUBJECT gibt, müssen Sie die Filterung selbst durchführen:

%Vor%     
FtDRbwLXw6 14.08.2012, 12:52
quelle
3

Angenommen, Sie möchten die E-Mail-Adresse des Besuchers wie folgt in das optionale Header-Feld eingeben:

%Vor%

Allerdings, wenn

  

$ visitorEmailAddress

enthält

  

"[email protected] \ n \ nBCC: [email protected]"

Sie haben sich selbst zu einem Spam-Host gemacht und die Tür für die Mail-Injektion geöffnet. Dies ist ein sehr einfaches Beispiel, aber kreative Spammer und böswillige Hacker können potenziell schädliche Skripte in Ihren E-Mails schleichen, da E-Mails als reine Textdatei gesendet werden. Selbst Anhänge sind konvertierter Klartext, und sie können Anhänge einfach durch Hinzufügen einer Mimetype-Inhaltszeile senden.

Wenn Ihre Formularüberprüfung für die Felder FROM und / oder TO OK ist, müssen Sie die Formularüberprüfung für den Hauptteil der E-Mail überprüfen. Ich würde die Zeichen '- =' und '= - ausziehen und verhindern, dass Benutzer HTML-Code eingeben, indem Sie strip_tags() verwenden.

    
Dirk de Man 14.08.2012 12:54
quelle
1

Versuchen Sie dies für eine Überprüfung der verschiedenen Optionen:

Ссылка

Es umfasst mehrere Optionen und versucht, die Vorteile und Risiken von jedem zu erklären.

    
Mike 05.09.2013 21:30
quelle
0

Verwenden Sie eine bestimmte Mime-E-Mail-Bibliothek, z. B. Mail_Mime :

%Vor%     
Eric 24.04.2015 17:20
quelle