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

Était-ce utile?

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); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top