la prévention de l'injection d'en-tête php mail
-
19-09-2019 - |
Question
Sur la page de manuel php pour la fonction de messagerie, il y avait un commentaire utilisateur disant « prendre soin d'éviter l'injection d'en-tête ».
Dans ma demande, j'utiliser la fonction de messagerie, et la seule entrée de l'utilisateur que j'utilise en tant que paramètre à la fonction est l'adresse e-mail.
Je fais une vérification préliminaire de l'adresse e-mail en utilisant le ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$
regex.
Est-ce que cela empêchera également contre l'injection d'en-tête?
Merci,
JRH
La solution
Quelqu'un voudrait injecter quelque chose comme ceci:
user_address@domain.com
CC: spam_address1@domain.com, spam_address2@domain.com, spam_address3@domain.com
Vous ne permettent pas \ r \ n qui est nécessaire pour définir de nouvelles informations d'en-tête. Ainsi, votre application est sûre.
Autres conseils
injection d'en-tête est un risque que si vous placez des éléments fournis par l'utilisateur dans les en-têtes de message. Un exemple typique utilise l'adresse e-mail affichée pour régler la tête Reply-To.
Voici ce que j'utilise:
$email = preg_replace(array("/\r/i","/\n/i", "/%0a/i", "/%0d/i", "/Content-Type:/i", "/bcc:/i", "/to:/i", "/cc:/i", "/Content\-Transfer\-Encoding\:/i", "/Mime\-Version\:/i" ), "", $email);