Heim > Artikel > Backend-Entwicklung > PHP-sichere E-Mails
Im PHP-E-Mail-Skript im vorherigen Abschnitt besteht eine Sicherheitslücke.
PHP-E-Mail-Injection
Schauen Sie sich zunächst den PHP-Code im vorherigen Kapitel an:
<html> <body> <?php if (isset($_REQUEST['email'])) //if "email" is filled out, send email { //send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } else //if "email" is not filled out, display the form { echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text'><br> Subject: <input name='subject' type='text'><br> Message:<br> <textarea name='message' rows='15' cols='40'> </textarea><br> <input type='submit'> </form>"; } ?> </body> </html>
Das Problem mit dem obigen Code besteht darin, dass nicht autorisierte Benutzer Daten verwenden kann über ein Eingabeformular in den E-Mail-Header eingefügt werden.
Was passiert, wenn der Benutzer der E-Mail im Eingabefeld des Formulars den folgenden Text hinzufü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 üblich fügt die Funktion mail() den obigen Text in den E-Mail-Header ein, sodass der Header jetzt zusätzliche Felder „Cc:“, „Bcc:“ und „An:“ enthält. Wenn der Benutzer auf die Schaltfläche „Senden“ klickt, wird diese E-Mail an alle oben genannten Adressen gesendet!
PHP verhindert E-Mail-Injection
Der beste Weg, E-Mail-Injection zu verhindern, besteht darin, die Eingabe zu validieren.
Der folgende Code ähnelt dem im vorherigen Kapitel, aber hier haben wir einen Eingabevalidator hinzugefügt, um das E-Mail-Feld im Formular zu erkennen:
<html> <body> <?php function spamcheck($field) { //filter_var() sanitizes the e-mail //address using FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() validates the e-mail //address using FILTER_VALIDATE_EMAIL 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", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } } else {//if "email" is not filled out, display the form echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text'><br> Subject: <input name='subject' type='text'><br> Message:<br> <textarea name='message' rows='15' cols='40'> </textarea><br> <input type='submit'> </form>"; } ?> </body> </html>
Im obigen Code Wir verwenden PHP-Filter, die zur Validierung der Eingabe verwendet werden:
FILTER_SANITIZE_EMAIL-Filter entfernt illegale Zeichen der E-Mail aus der Zeichenfolge
FILTER_VALIDATE_EMAIL-Filter validiert den Wert der E-Mail-Adresse
Das Obige ist Der Inhalt von PHP Secure E-Mails. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!