Vous avez développé un formulaire d’envoi par courriel utilisant la fonction mail()? Si oui, avez-vous pensé à vous protéger des injections d’en-têtes, lesquelles peuvent faire de votre beau petit script de 10 lignes un relai de spam considérable? Non? Qu’attendez-vous?

Comment les spammers s’y prennent?

Très simple! Il ne font qu’entrer un truc du genre dans un champ de votre formulaire :

email@domaine.com \n CC: spam1@domaine.com, spam2@domaine.com...

Les en-têtes e-mail étant très sensibles, elles considèrent le saut de ligne (\r) ou les nouvelles lignes (\n) explicites comme le début d’une nouvelle directive (ici, l’insertion d’une liste d’adresses en copie-conforme). Voyez une multitude d’exploit ici.

Comment s’en protéger?

Encore une fois, rien de plus facile. Dans votre validation, vous n’avez qu’à y aller d’une petite expression régulière sur les champs soumis :

if ( eregi("(\r|\n)", $_GET['nom']) || eregi("(\r|\n)", $_GET['email']) )
	exit("Va-t'en, spammer!");

N’oubliez pas de traiter chacun des champs qui sont utilisés dans la construction des en-têtes (nom, courriel, format, charset, etc.) de votre message.

Commentaires Facebook

1 Tweet

3 commentaires pour “Protéger la fonction mail() des injections d’en-têtes”

  • Pour rajouter de la sécurité pour l’envoie d’un formulaire tu peux aussi vérifier la provenance de l’internaute et le bloque si c’est appeler a partir d’un autre site que le tien pour éviter le SPAM

  • Mon commentaire précédant n’a pas marcher deuxième essai :

    A ajouter avant l’envoie du formulaire :

    if(!eregi(« estrade.ca », $_SERVER['HTTP_REFERER'])) die (« Va-t’en, spammer! »);

    je pense que l’espace commentaire enlève les balise d’ouverture et fermuture PHP

Ajouter un commentaire

Additional comments powered by BackType

Twitter @emilegirard

Mots-clefs

Ailleurs

Méta