Formulaire e-mail & spamming

Toute personne qui a déjà créé son propre site (en PHP) a forcément déjà employé la sympathique commande mail() pour envoyer le contenu d’un formulaire par e-mail. Le présent site ne faillit pas à la règle (voir bas de page)… Or, cela faisait un petit temps que je recevais des mails de ce type:


Nom: by1035@pilok.com
E-mail: by1035@pilok.com
commentaires:
Content-Type: text/plain; charset=\"us-ascii\"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: iv onneticut
bcc: onemoreaddress@hotpop.com
515b33ac4699c944b18fc5c22ff3c23d

Comme avec mon bon vieux filtre anti-spam, ils étaient d’office effacer, je n’y ai jamais fait vraiment attention.
Mais en creusant un peu dernièrement, je me suis aperçu qu’il s’agissait en fait de tentatives de spamming “par injection de headers”.

La fonction mail de PHP fonctionne sur base de la structur suivante:
mail([DESTINATAIRE],[SUJET],[MESSAGE],[HEADERS]);

Etant donné que la plupart des formulaires e-mails demandent à l’expéditeur d’indiquer son adresse e-mail et sachant que cette adresse vient se placer dans la partie header de la fonction mail(), il est alors facile pour les hackers et spammers d’ajouter des en-têtes en plus… comment? en copiant-collant un code comme celui-ci:

email@anonymous.com%0ACc:email1@website1.com%0ABcc:email2@website2.com,email3@website3.com

les caractères %0A correspondant à un retour à la ligne, le mail est alors envoyé en copie à autant d’adresse que l’on veut.
Si vous souhaitez plus de détails sur cette technique:
PHPSecure

Comment y remédier? PHPSecure présente une technique assez simple qui recherche les caractères à problème (les saut de ligne). Vous pouvez également employer la technique suivante:

$sender=trim($_POST['sender']);

Grâce à cette fonction, les caractères du type \n \r, etc seront supprimés automatiquement et votre script sera protégé.

Vous souhaitez en savoir d’avantage sur la sécurité PHP? Je vous recommande ILoveJackDaniels

Bonne semaine.