PHP-Sichere E-Mail
- Vorherige Seite PHP E-Mail
- Nächste Seite PHP Fehler
In dem PHP-eMail-Skript im vorherigen Abschnitt gibt es eine Lücke.
PHP E-Mail-Injektion
Zunächst einmal, schauen Sie sich den PHP-Code im vorherigen Abschnitt an:
<html> <body> <?php if (isset($_REQUEST['email'])) //Wenn "email" ausgefüllt ist, E-Mail senden { //E-Mail senden $email = $_REQUEST['email']; $subject = $_REQUEST['subject']; $message = $_REQUEST['message']; mail("someone@example.com", "Betreff: $subject", $message, "Von: $email" ); echo "Vielen Dank, dass Sie unser Mailformular verwenden"; } else //Wenn "email" nicht ausgefüllt ist, das Formular anzeigen { echo "<form method='post' action='mailform.php'> E-Mail: <input name='email' type='text' /><br /> Betreff: <input name='subject' type='text' /><br /> Nachricht:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
Das Problem mit dem folgenden Code ist, dass nicht berechtigte Benutzer Daten in den E-Mail-Kopf eingefügt können, indem sie das Formular ausfüllen.
Was passiert, wenn der Benutzer diesen Text in das Eingabefeld des Formulars einfügt?
someone@example.com%0ACc:person2@example.com %0ABcc:person3@example.com,person3@example.com, anotherperson4@example.com,person5@example.com %0ABTo:person6@example.com
Wie gewohnt, platzt die mail() -Funktion den obigen Text in den E-Mail-Kopf, daher sind jetzt zusätzliche Cc:, Bcc: und To:-Felder im Kopf vorhanden. Wenn der Benutzer auf die Schaltfläche Submit klickt, wird diese E-Mail an alle angegebenen Adressen gesendet!
PHP zur Verhinderung von E-Mail-Injection
Der beste Weg, um E-Mail-Injection zu verhindern, ist die Validierung der Eingaben.
Die folgenden Codezeilen sind ähnlich wie im vorherigen Abschnitt, aber wir haben die Validierung der E-Mail-Adresse im Formular hinzugefügt:
<html> <body> <?php function spamcheck($field) { //filter_var() sanitizes the e-mail $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() validates the e-mail if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } if (isset($_REQUEST['email'])) //if "email" is filled out, proceed //check if the email address is invalid $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "Invalid input"; } else //send email $email = $_REQUEST['email']; $subject = $_REQUEST['subject']; $message = $_REQUEST['message']; mail("someone@example.com", "Betreff: $subject", $message, "Von: $email" ); echo "Vielen Dank, dass Sie unser Mailformular verwenden"; } } else // Wenn "email" nicht ausgefüllt ist, wird das Formular angezeigt echo "<form method='post' action='mailform.php'> E-Mail: <input name='email' type='text' /><br /> Betreff: <input name='subject' type='text' /><br /> Nachricht:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
Im obigen Code haben wir PHP Filter verwendet, um die Eingabe zu validieren:
- FILTER_SANITIZE_EMAIL entfernt ungültige Zeichen aus der E-Mail
- FILTER_VALIDATE_EMAIL überprüft die E-Mail-Adresse
Sie können in unserem PHP FilterIn diesem Abschnitt können Sie mehr über Filter lesen.
- Vorherige Seite PHP E-Mail
- Nächste Seite PHP Fehler