2017-03-06 1 views
2

Ich habe folgenden Kommentar in der offiziellen Dokumentation von PHP über mail() Funktion lesen:Sind Subjekt und Körper gegen die Injektion mit Mail() sicher?

Obwohl es nicht dokumentiert ist, für die Parameter $ und die E-Mail $ subject() Funktion ändert zumindest \ r und \ n zum Leerzeichen. Diese Parameter sind also sicher gegen die Injektion zusätzlicher Header. Vielleicht möchten Sie $ für Kommas überprüfen, da diese mehrere Adressen trennen und Sie möglicherweise nicht an mehrere Empfänger senden möchten.

Ist es korrekt? Außerdem habe ich immer den $ message Parameter als sicher gegen die Injektion betrachtet, ist das auch richtig?

Ich weiß, wie ich mich vor der Injektion schützen kann, ich möchte nur wissen, ob ich vermeiden kann, diese Parameter zu filtern.

+0

Hängt davon ab, was Sie mit der Injektion meinen. Wenn Sie dem Benutzer Werte für den Empfänger geben lassen, können diese natürlich die gewünschten Werte angeben. –

+0

Dupliziert mit diesem: http://stackoverflow.com/questions/8071916/escape-string-to-use-in-mail –

+0

@SamiKuhmonnen nein, ich meine Injektion von zusätzlichen Headern (E-Mail-Injektion-Schwachstelle). – Joy

Antwort

1

Ja, das stimmt, aber es ist auch nicht vollständig. Im Quellcode des Motors stellt die Funktion php_mail_build_headers sicher, dass die Header den Anforderungen RFC 2822 § 3.6 für die maximale Anzahl von Werten entsprechen. Insbesondere werden die folgenden Überschriften für Einzelwert geprüft:

  • orig-date
  • from
  • sender
  • reply-to
  • to
  • bcc
  • message-id
  • in-reply-to
  • subject

Ja, wird die Meldung Parameter ist von Header Injektionsdefinitions sicher: der Nachrichtenteil nach dem Trennen neue Linie zwischen Kopf- und Körper eingeführt wird, so dass jeder Kopf wie Text als Teil eingefügt der Nachricht wird als wörtlicher Text im Nachrichtentext angezeigt.

0

Für Ihren Kommentar, dass Sie diese Filter nicht anwenden möchten.

Ich denke, Sie können es automatisch durch Verwendung von Zend_Mail, wie ich kommentierte.

$ composer require zendframework/zend-mail 

ich einfügen dies von ihren documentation:

use Zend\Mail\Message; 
use Zend\Mail\Transport\Sendmail as SendmailTransport; 

$message = new Message(); 
$message->addTo('[email protected]'); 
$message->addFrom('[email protected]'); 
$message->setSubject('Greetings and Salutations!'); 
$message->setBody("Sorry, I'm going to be late today!"); 

$transport = new SendmailTransport(); 
$transport->send($message); 
+0

Danke, aber das ist keine Antwort auf meine Frage. – Joy

Verwandte Themen