Post by Serge NazarianPost by Olivier MiakinenIl faudrait que $nom et $email soient syntaxiquement corrects, mais
je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas
directement d'une requête faite à l'utilisateur, sans contrôle, car
sinon ton script peut être utilisé pour spammer la terre entière.
Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre
entière » car effectivement $nom et $email proviennent d'un formulaire
rempli par l'utilisateur.
Très volontiers.
Dans un courriel, ce qui sépare les entêtes du contenu du message,
c'est juste deux sauts de ligne de suite. Avoir un contrôle sur une
partie du contenu d'un entête suffit alors pour ajouter d'une part
de nombreux autres entêtes, d'autre part le corps du message lui-même.
Pour cela, il suffit que le paramètre $nom ou $email contienne par
exemple :
"\n
Subject: achetez mon beau produit\n
To: <adresse_spammée_1>\n
To: <adresse_spammée_2>\n
...
To: <adresse_spammée_3000>\n
\n
J'ai un superbe produit à vendre, achetez-le.\n
Allez sur <site_de_spam>.\n
...
...\n"
Le spammeur peut faire mieux, d'abord en complétant le champ From
au lieu de l'interrompre brutalement, et aussi en envoyant son
spam en MIME Multipart, ce qui relègue le *vrai* contenu de ton
message dans une zone cachée (il ne reste donc plus que le spam
et rien d'autre).
Heureusement, on peut s'en protéger. La solution /a minima/ consiste
à vérifier que les champs $nom et $email ne contiennent aucun saut
de ligne.
Tu peux aller plus loin, en vérifiant d'abord que l'adresse de courriel
est syntaxiquement correcte : <http://faqfclphp.free.fr/#rub5.3>. Pour
bien faire, il faudrait aussi encoder le nom selon MIME (RFC 2047) si
jamais il contient des caractères non ASCII, mais je parierais bien
que la classe PHPMailer indiquée par Jean-François sait le faire.
--
Olivier Miakinen