Envoi avec mail() et la sécurité? - Apprendre-PHP.com

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Envoi avec mail() et la sécurité?

Par bodytalk -  7 reponses -  Le 20/02/2008 -  Flux RSS - 

Bonjour, originaire de la pao, sur Mac depuis 1990, je m'intéresse (seulement) depuis quelque mois au html, CSS et php; (merci à votre site et au site du zéro qui m'ont été bien utile). J'ai donc fait un site pour un ami et j'aimerais savoir si ce script est sécurit ou si je dois rajouter certaines conditions pour éviter les injections ou autre désagréments. Tout fonctionne pour le moment, mis à part le header que je n'ose modifier...

Voici donc le script récupéré et modifié:

### Modéré car non mis en forme ###

 

 

Réponses apportées à cette discussion

Par Emacs -  Le 20/02/2008 - 

Bonjour,

Peux-tu nous redonner ton code en utilisant l'icône approprié pour le mettre en forme stp ?

Merci :) 

 
Par bodytalk -  Le 20/02/2008 - 
page de traitement des données
  1. <?
  2. //on rend innofensives les données (seulement le HTML ici)
  3. $_POST=array_map('stripslashes',$_POST);
  4. $_POST=array_map('trim',$_POST);
  5. foreach($_POST as $champ=>$valeur)
  6. $_POST[$champ]=htmlspecialchars($valeur,ENT_NOQUOTES);
  7. $date=date('d/m/Y H:i:s');
  8. //on prépare les données pour envoyer le mail
  9. $header='From: '.$destinataire."\r\n".'Content-type:text/plain;charset=iso-8859-1';
  10. $subject='Demande de reservation';
  11. $message='';
  12. //tous les champs du formulaire sont ajoutés dans le message
  13. foreach($_POST as $cle=>$valeur)
  14. $message.=$cle.' : '.$valeur."\n";
  15. //on envoie le mail en séparant les adresse des deux destinataires par une virgule et un espace dans le premier argument de la fonction
  16. mail('bodytalk1@free.fr',$subject,$message,$header);
  17. //on dirige vers le résultat, mais on petut le faire au début, seulement on ne verra pas les erreurs s'il y en a.
  18. header('Location: http://www.exemple.com/expl.html');
  19. ?>

Ouups, désolé, vraiment newbie ...

 
Par bodytalk -  Le 20/02/2008 - 

Ah, j'oubliais le second inconvénient, c'est l'accentuation et les "ç" qui arrivent comme dans le code; pourtant il y a bien iso-8859?!?...

 
Par Emacs -  Le 20/02/2008 - 

Salut,

Plusieurs remarques :

1/ Les tags PHP sont <?php et non <?
2/ Tes array_map() sur tes tableaux superglobaux ne servent à rien si ce n'est utilisé pas mal de ressources.  Tu peux tout faire dans ta boucle foreach() finale
3/ Concernant la sécurité, il faut que tu filtres les caractères dangereux \n \r... Tu as des aides pour sécuriser tout ça ici:

http://nyphp.org/phundamentals/email_header_injection.php

Voilà :) 

 

 
Par bodytalk -  Le 21/02/2008 - 

Super merci pour ta réponse; je suis vraiment un gros naze pour l'erreur 1/

Le fait est que, avec les guides ovh, cela fait une somme énorme d'infos à ingurgiter (heureusement que je parle anglais). Je retourne potasser.

@ bientôt 

 

 
Par bodytalk -  Le 22/02/2008 - 
pour sécuriser
  1. if (eregi("\r",$valeur) || eregi("\n",$valeur)){
  2. die("Why ?? :(");
  3. }

Re-bonjour, après quelques recherches, j'ai trouvé ce code, mais le "\r" et "\n" sont déjà dans le $header

donc est-ce deux choses différentes?

Désolé pour mon niveau 0 mais je sature avec toute ces infos :-(

 

 
Par Emacs -  Le 24/02/2008 - 

Bonjour,

Ce code est obsolète... Il faut préférer un preg_match() ou bien un preg_replace() qui sont plus rapides.

 

Ajouter une réponse à la discussion

Seuls les membres loggués sont autorisés à poster dans les forums !