Heim  >  Artikel  >  Backend-Entwicklung  >  Sichere PHP-E-Mail

Sichere PHP-E-Mail

巴扎黑
巴扎黑Original
2016-11-11 18:03:481469Durchsuche


PHP Secure Email

PHP E-Mail

PHP Error

PHP E-Mail im vorherigen Abschnitt Es gibt eine Sicherheitslücke im Mail-Skript.

PHP-E-Mail-Injection

Schauen Sie sich zunächst den PHP-Code im vorherigen Abschnitt an:

<html>
<body>
<?php
if (isset($_REQUEST[&#39;email&#39;]))
//if "email" is filled out, send email
  {
  //send email
  $email = $_REQUEST[&#39;email&#39;] ; 
  $subject = $_REQUEST[&#39;subject&#39;] ;
  $message = $_REQUEST[&#39;message&#39;] ;
  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=&#39;post&#39; action=&#39;mailform.php&#39;>
  Email: <input name=&#39;email&#39; type=&#39;text&#39; /><br />
  Subject: <input name=&#39;subject&#39; type=&#39;text&#39; /><br />
  Message:<br />
  <textarea name=&#39;message&#39; rows=&#39;15&#39; cols=&#39;40&#39;>
  </textarea><br />
  <input type=&#39;submit&#39; />
  </form>";
  }
?>
</body>
</html>

Das Problem mit dem obigen Code besteht darin, dass nicht autorisierte Benutzer Daten übertragen kann über ein Eingabeformular in den E-Mail-Header eingefügt werden.

Was passiert, wenn der Benutzer diese Texte zum Eingabefeld im Formular hinzufügt?

someone@example.com Cc:person2@example.com

Bcc:person3@example.com,person3@example.com,

andereperson4@example.com,person5@example.com

BTo: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 vorherigen Abschnitt, wir haben jedoch 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[&#39;email&#39;]))
  {//if "email" is filled out, proceed
  //check if the email address is invalid
  $mailcheck = spamcheck($_REQUEST[&#39;email&#39;]);
  if ($mailcheck==FALSE)
    {
    echo "Invalid input";
    }
  else
    {//send email
    $email = $_REQUEST[&#39;email&#39;] ; 
    $subject = $_REQUEST[&#39;subject&#39;] ;
    $message = $_REQUEST[&#39;message&#39;] ;
    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=&#39;post&#39; action=&#39;mailform.php&#39;>
  Email: <input name=&#39;email&#39; type=&#39;text&#39; /><br />
  Subject: <input name=&#39;subject&#39; type=&#39;text&#39; /><br />
  Message:<br />
  <textarea name=&#39;message&#39; rows=&#39;15&#39; cols=&#39;40&#39;>
  </textarea><br />
  <input type=&#39;submit&#39; />
  </form>";
  }
?>
</body>
</html>

Im obigen Code verwenden wir PHP-Filterung So validieren Sie die Eingabe:

FILTER_SANITIZE_EMAIL Entfernen Sie unzulässige Zeichen der E-Mail aus der Zeichenfolge

FILTER_VALIDATE_EMAIL Validieren Sie die E-Mail-Adresse



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn