2010-05-01 18 views
2

Je suis en train de faire du stage pour une ONG en Inde (Seva Mandir, http://sevamandir.org) et j'essaie de réparer leur boîte «abonnez-vous à la newsletter». Parce que le personnel n'est pas très sophistiqué et que notre hébergeur n'est pas génial, j'ai décidé d'envoyer les données pertinentes à la personne des publications via mail() au lieu de les stocker dans une base de données MySQL. Je sais qu'il est préférable de traiter les entrées des utilisateurs comme malveillantes, et j'ai recherché sur les forums SO des messages concernant l'échappement de données utilisateur pour l'envoi d'un message électronique. Je sais que les données devraient être échappées; De quoi devrais-je m'inquiéter et quelle est la meilleure façon d'assainir l'entrée avant de l'envoyer par courriel?Désinfecter les commentaires des utilisateurs qui seront postés par la suite - de quoi devrais-je m'inquiéter?

Notez également que l'hôte Web de l'organisation utilise toujours PHP 4, donc je ne peux pas simplement utiliser filter_var pour les chaînes. Je suis working with them to fix the problem, mais pour l'instant je devrais utiliser regexes ou strip_tags ou une autre méthode.

Flux d'un formulaire: 1.
L'utilisateur entre e-mail sur la page d'accueil et clique sur Envoyer
2. L'utilisateur entre le nom, l'adresse, plus d'informations sur deuxième page (mauvaise ergonomie, je sais, mais mon patron m'a demandé de) et clique "Soumettre"
3. Collectez les données via $ _POST et envoyez-les par e-mail à l'éditeur de publications (et éventuellement envoyez une confirmation à l'abonné).

Je vais désinfectez l'e-mail à l'étape 2 et les autres données à l'étape 3. Je vous remercie de votre aide,
Kevin

Répondre

1

Vous devez être conscient des attaques Email Header Injection.

Fondamentalement, si vous dépouillez \n et \r du du $name, $from, $to et $subject vous devriez être assez sûr, mais il est toujours préférable d'adopter une approche de liste blanche.

+1

J'ai utilisé ce code (à partir du lien, pour tous ceux qui visitent cette question à l'avenir): function safe ($ name) { return (str_ireplace (array ("\ r", "\ n", "% 0a ","% 0d "," Content-Type: "," bcc: "," à: "," cc: ")," ", $ name)); } –

2

En ce je que je sache, aussi longtemps que vous utilisez le texte brut et insérer les données entrées par l'utilisateur uniquement dans le corps de l'e-mail, il n'y a rien à désinfecter.

2

Si vous utilisez l'adresse e-mail saisie par l'utilisateur pour envoyer une confirmation, assurez-vous de n'avoir entré qu'un seul e-mail. Un spammeur peut faucher des sauts de ligne, et par conséquent arbitrairement long Bcc: entrées, dans vos en-têtes de message si vous ne faites pas attention.

Voir email injection.

+0

et sous réserve –

+0

Il ne semble pas qu'il laisse l'utilisateur entrer un sujet, mais oui, tout ce qui est destiné aux en-têtes doit être propre. –

+1

J'utilise rfc3696 pour désinfecter l'entrée email de l'utilisateur. Toutes les entrées (nom, email, etc) vont dans le corps de l'e-mail que j'envoie à l'éditeur de publication. –

Questions connexes