PHP Veilige E-mail
- Vorige pagina PHP E-mail
- Volgende pagina PHP Error
Er is een lek in het PHP e-mail script uit het vorige hoofdstuk.
PHP E-mail Injectie
Eerst en vooral, kijk naar het PHP-code voorbeeld in het vorige hoofdstuk:
<html> <body> <?php if (isset($_REQUEST['email'])) //Als "email" is ingevuld, verstuur e-mail { //Verstuur e-mail $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 //Als "email" niet is ingevuld, toon het formulier { echo "<form method='post' action='mailform.php'> E-mail: <input name='email' type='text' /><br /> Onderwerp: <input name='subject' type='text' /><br /> Bericht:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
Het probleem met de bovenstaande code is dat onbevoegde gebruikers gegevens kunnen injecteren in de e-mailkop door het invullen van het formulier.
Wanneer de gebruiker deze tekst invoert in het invoerveld van het formulier, wat zal er dan gebeuren?
someone@example.com%0ACc:person2@example.com %0ABcc:person3@example.com,person3@example.com, anotherperson4@example.com,person5@example.com %0ABTo:person6@example.com
Net als altijd, plaats de tekst in de e-mailkop met de mail() functie, dus nu zijn er extra Cc:, Bcc: en To: velden in de kop. Wanneer de gebruiker op de knop indient, wordt dit e-mail naar alle hierboven vermelde adressen verzonden!
PHP voorkomen van e-mailinjectie
De beste manier om e-mailinjectie te voorkomen, is door invoer te valideren.
Deze code is vergelijkbaar met het vorige deel, maar we hebben nu de invoervalidatie van het e-mailveld in het formulier toegevoegd:
<html> <body> <?php function spamcheck($field) { //filter_var() schoonmaakt het e-mailadres $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() validatie van het e-mailadres if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } if (isset($_REQUEST['email'])) //als "e-mail" is ingevuld, ga verder //controleer of het e-mailadres ongeldig is $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "Ongeldige invoer"; } else //verzend e-mail $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'> E-mail: <input name='email' type='text' /><br /> Onderwerp: <input name='subject' type='text' /><br /> Bericht:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
In de bovenstaande code hebben we PHP filters gebruikt om de invoer te valideren:
- FILTER_SANITIZE_EMAIL verwijdert ongeldige karakters uit de e-mail
- FILTER_VALIDATE_EMAIL verifieert het e-mailadres
U kunt onze PHP filtersLees meer over filters in dit hoofdstuk.
- Vorige pagina PHP E-mail
- Volgende pagina PHP Error