PHP Sikre Email
- Forrige side PHP E-mail
- Næste side PHP fejl
Der er en fejl i PHP e-mail-skriptet i det forrige afsnit.
PHP E-mail Indsættelse
Først, se på PHP-koden i det forrige afsnit:
<html> <body> <?php if (isset($_REQUEST['email'])) //Hvis "email" er udfyldt, send e-mail { //Send e-mail $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Emne: $subject", $message, "Fra: $email" ); echo "Tak fordi du bruger vores mailformular"; } else //Hvis "email" ikke er udfyldt, vis formularen { echo "<form method='post' action='mailform.php'> E-mail: <input name='email' type='text' /><br /> Emne: <input name='subject' type='text' /><br /> Besked:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
Problemet med ovenstående kode er, at uautoriserede brugere kan indsætte data i e-mailhovedet ved hjælp af inputformularen.
Hvis brugeren tilføjer disse tekster i inputfeltet på formularen, hvad vil der ske?
someone@example.com%0ACc:person2@example.com %0ABcc:person3@example.com,person3@example.com, anotherperson4@example.com,person5@example.com %0ABTo:person6@example.com
Som altid lægger mail() funktionen teksten ovenfor ind i e-mailens header, så nu har headeren ekstra felter som Cc:, Bcc: og To:. Når brugeren klikker på submit-knappen, sendes denne e-mail til alle adresserne!
PHP til at forhindre e-mail-injektion
Den bedste måde at forhindre e-mail-injektion er at validere input.
Denne kode ligner den forrige sektion, men vi har tilføjet en inputvalideringsproces for email-feltet i formularen:
<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", "Emne: $subject", $message, "Fra: $email" ); echo "Tak fordi du bruger vores mailformular"; } } else //Hvis "email" ikke er udfyldt, vis formularen echo "<form method='post' action='mailform.php'> E-mail: <input name='email' type='text' /><br /> Emne: <input name='subject' type='text' /><br /> Besked:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
I ovenstående kode brugte vi PHP filtre til at validere input:
- FILTER_SANITIZE_EMAIL fjerner ulovlige tegn fra e-mail-adressen
- FILTER_VALIDATE_EMAIL verificerer e-mail-adressen
Du kan finde flere oplysninger om vores PHP filtreLæs mere om filtre i dette afsnit.
- Forrige side PHP E-mail
- Næste side PHP fejl