securité sur code php

securité sur code php - PHP - Programmation

Marsh Posté le 26-01-2009 à 11:24:10    

jour
voila j'aurais voulu savoir si mon code était securisé  j'ai mis des htmlspecialchars mais je sais pas si ca suffit :
 
<?php
 
 $destinataire = 'xxxxx@xxxxx.fr';    
 
 // copie ? (envoie une copie au visiteur)
 $copie = 'oui'; // 'oui' ou 'non'
 
 
 $message_envoye = "Votre message nous est bien parvenu !";
 $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
 
 
 $message_erreur_formulaire = "Vous devez d'abord <a href=\"form.html\">envoyer le formulaire</a>.";
 $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
 
 
 
 if (!isset($_POST['envoi']))
 {
   
  echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
 }
 else
 {
   
  function Rec($text)
  {
   $text = trim($text); // delete white spaces after & before text
   if (1 === get_magic_quotes_gpc())
   {
    $stripslashes = create_function('$txt', 'return stripslashes($txt);');
   }
   else
   {
    $stripslashes = create_function('$txt', 'return $txt;');
   }
 
   // magic quotes ?
   $text = $stripslashes($text);
   $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
   $text = nl2br($text);
   return $text;
  };
 
   
  function IsEmail($email)
  {
   $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
   return (eregi($pattern,$email)) ? true : false;
  };
 
   
  $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
  $prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
  $tel = (isset($_POST['tel'])) ? Rec($_POST['tel']) : '';
        $email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
        $evenement = (isset($_POST['evenement'])) ? Rec($_POST['evenement']) : '';  
        $date = (isset($_POST['date'])) ? Rec($_POST['date']) : '';  
        $budget = (isset($_POST['budget'])) ? Rec($_POST['budget']) : '';
        $adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
  $personnes = (isset($_POST['personnes'])) ? Rec($_POST['personnes']) : '';
  $infos = (isset($_POST['infos'])) ? Rec($_POST['infos']) : '';
 
       
 
   
        $message = "$budget\n\n$adresse\n\n$personnes\n\n$tel\n\n$date\n\n$infos";    
  $message  =  nl2br ($message);
  $adresse = nl2br($adresse);
  $infos  = nl2br($infos);
   
 
  $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
 
  if (($nom != '') && ($prenom != '') && ($email != '') && ($evenement != '') && ($date != '') && ($budget != '') && ($adresse != '') && ($personnes != '') )
  {
   
   $headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";  
   
 
   
 
   if ($copie == 'oui')
   {
    $cible = $destinataire.','.$email;
   }
   else
   {
    $cible = $destinataire;
   };
 
   
   $message = str_replace("&#039;","'",$message);
   $message = str_replace("&#8217;","'",$message);
   $message = str_replace("&quot;",'"',$message);
   $message = str_replace('<br>','',$message);
   $message = str_replace('<br />','',$message);
   $message = str_replace("&lt;","<",$message);
   $message = str_replace("&gt;",">",$message);
   $message = str_replace("&amp;","&",$message);
   $evenement = str_replace("&#039;","'",$evenement);
 
   
 
   if (mail($cible, $evenement, $message, $headers))
   {
    echo '<p>'.$message_envoye.'</p>'."\n";
   }
   else
   {
    echo '<p>'.$message_non_envoye.'</p>'."\n";
   };
  }
  else
  {
   
   echo '<p>'.$message_formulaire_invalide.' <a href="form.html">Retour au formulaire</a></p>'."\n";
  };
 }; // fin du if (!isset($_POST['envoi']))
?>
 
 
merci

Reply

Marsh Posté le 26-01-2009 à 11:24:10   

Reply

Marsh Posté le 26-01-2009 à 11:25:02    

Tu peux éditer ton post et mettre ton code entre balises  ?
[ code=php]
[/code]
 
Comme ça on y voit mieux


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 26-01-2009 à 14:17:58    

ok chef
 
[ code=php]<?php
 
 $destinataire = 'xxxxx@xxxxx.fr';    
 
 // copie ? (envoie une copie au visiteur)
 $copie = 'oui'; // 'oui' ou 'non'
 
 
 $message_envoye = "Votre message nous est bien parvenu !";
 $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
 
 
 $message_erreur_formulaire = "Vous devez d'abord <a href=\"form.html\">envoyer le formulaire</a>.";
 $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
 
 
 
 if (!isset($_POST['envoi']))
 {
   
  echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
 }
 else
 {
   
  function Rec($text)
  {
   $text = trim($text); // delete white spaces after & before text
   if (1 === get_magic_quotes_gpc())
   {
    $stripslashes = create_function('$txt', 'return stripslashes($txt);');
   }
   else
   {
    $stripslashes = create_function('$txt', 'return $txt;');
   }
 
   // magic quotes ?
   $text = $stripslashes($text);
   $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
   $text = nl2br($text);
   return $text;
  };
 
   
  function IsEmail($email)
  {
   $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
   return (eregi($pattern,$email)) ? true : false;
  };
 
   
  $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
  $prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
  $tel = (isset($_POST['tel'])) ? Rec($_POST['tel']) : '';
        $email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
        $evenement = (isset($_POST['evenement'])) ? Rec($_POST['evenement']) : '';  
        $date = (isset($_POST['date'])) ? Rec($_POST['date']) : '';  
        $budget = (isset($_POST['budget'])) ? Rec($_POST['budget']) : '';
        $adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
  $personnes = (isset($_POST['personnes'])) ? Rec($_POST['personnes']) : '';
  $infos = (isset($_POST['infos'])) ? Rec($_POST['infos']) : '';
 
       
 
   
        $message = "$budget\n\n$adresse\n\n$personnes\n\n$tel\n\n$date\n\n$infos";    
  $message  =  nl2br ($message);
  $adresse = nl2br($adresse);
  $infos  = nl2br($infos);
   
 
  $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
 
  if (($nom != '') && ($prenom != '') && ($email != '') && ($evenement != '') && ($date != '') && ($budget != '') && ($adresse != '') && ($personnes != '') )
  {
   
   $headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";  
   
 
   
 
   if ($copie == 'oui')
   {
    $cible = $destinataire.','.$email;
   }
   else
   {
    $cible = $destinataire;
   };
 
   
   $message = str_replace("&#039;","'",$message);
   $message = str_replace("&#8217;","'",$message);
   $message = str_replace("&quot;",'"',$message);
   $message = str_replace('<br>','',$message);
   $message = str_replace('<br />','',$message);
   $message = str_replace("&lt;","<",$message);
   $message = str_replace("&gt;",">",$message);
   $message = str_replace("&amp;","&",$message);
   $evenement = str_replace("&#039;","'",$evenement);
 
   
 
   if (mail($cible, $evenement, $message, $headers))
   {
    echo '<p>'.$message_envoye.'</p>'."\n";
   }
   else
   {
    echo '<p>'.$message_non_envoye.'</p>'."\n";
   };
  }
  else
  {
   
   echo '<p>'.$message_formulaire_invalide.' <a href="form.html">Retour au formulaire</a></p>'."\n";
  };
 }; // fin du if (!isset($_POST['envoi']))
?>[/code]
 
je sais pas si c'est ca qu'il fallait daire mais bon

Reply

Marsh Posté le 26-01-2009 à 14:23:36    

Enlève l'espace entre "[" et "code" dans le tag s'il te plait (dans mon autre post je l'ai volontairement ajouté parce que sinon la commande est interprétée :) )


Message édité par esox_ch le 26-01-2009 à 14:23:54

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 26-01-2009 à 18:27:07    

labrat a écrit :

Code :
  1. $stripslashes = create_function('$txt', 'return $txt;');



 [:al2beer] php


Message édité par Profil supprimé le 26-01-2009 à 18:27:23
Reply

Marsh Posté le 27-01-2009 à 23:40:44    

reok chef
 
[ code=php]<?php
 
 $destinataire = 'xxxxx@xxxxx.fr';    
 
 // copie ? (envoie une copie au visiteur)
 $copie = 'oui'; // 'oui' ou 'non'
 
 
 $message_envoye = "Votre message nous est bien parvenu !";
 $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
 
 
 $message_erreur_formulaire = "Vous devez d'abord <a href=\"form.html\">envoyer le formulaire</a>.";
 $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
 
 
 
 if (!isset($_POST['envoi']))
 {
   
  echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
 }
 else
 {
   
  function Rec($text)
  {
   $text = trim($text); // delete white spaces after & before text
   if (1 === get_magic_quotes_gpc())
   {
    $stripslashes = create_function('$txt', 'return stripslashes($txt);');
   }
   else
   {
    $stripslashes = create_function('$txt', 'return $txt;');
   }
 
   // magic quotes ?
   $text = $stripslashes($text);
   $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
   $text = nl2br($text);
   return $text;
  };
 
   
  function IsEmail($email)
  {
   $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
   return (eregi($pattern,$email)) ? true : false;
  };
 
   
  $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
  $prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
  $tel = (isset($_POST['tel'])) ? Rec($_POST['tel']) : '';
        $email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
        $evenement = (isset($_POST['evenement'])) ? Rec($_POST['evenement']) : '';  
        $date = (isset($_POST['date'])) ? Rec($_POST['date']) : '';  
        $budget = (isset($_POST['budget'])) ? Rec($_POST['budget']) : '';
        $adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
  $personnes = (isset($_POST['personnes'])) ? Rec($_POST['personnes']) : '';
  $infos = (isset($_POST['infos'])) ? Rec($_POST['infos']) : '';
 
       
 
   
        $message = "$budget\n\n$adresse\n\n$personnes\n\n$tel\n\n$date\n\n$infos";    
  $message  =  nl2br ($message);
  $adresse = nl2br($adresse);
  $infos  = nl2br($infos);
   
 
  $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
 
  if (($nom != '') && ($prenom != '') && ($email != '') && ($evenement != '') && ($date != '') && ($budget != '') && ($adresse != '') && ($personnes != '') )
  {
   
   $headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";  
   
 
   
 
   if ($copie == 'oui')
   {
    $cible = $destinataire.','.$email;
   }
   else
   {
    $cible = $destinataire;
   };
 
   
   $message = str_replace("&#039;","'",$message);
   $message = str_replace("&#8217;","'",$message);
   $message = str_replace("&quot;",'"',$message);
   $message = str_replace('<br>','',$message);
   $message = str_replace('<br />','',$message);
   $message = str_replace("&lt;","<",$message);
   $message = str_replace("&gt;",">",$message);
   $message = str_replace("&amp;","&",$message);
   $evenement = str_replace("&#039;","'",$evenement);
 
   
 
   if (mail($cible, $evenement, $message, $headers))
   {
    echo '<p>'.$message_envoye.'</p>'."\n";
   }
   else
   {
    echo '<p>'.$message_non_envoye.'</p>'."\n";
   };
  }
  else
  {
   
   echo '<p>'.$message_formulaire_invalide.' <a href="form.html">Retour au formulaire</a></p>'."\n";
  };
 }; // fin du if (!isset($_POST['envoi']))
?>[code]
 
je resais pas si c'est ca qu'il fallait daire mais bon
 
luc@s y'a un bleme avec mon stripslahes? parce qu'apparement ce que tu as ecris c'est âreil que moi non?
bon merci quand meme

Reply

Marsh Posté le 28-01-2009 à 01:25:56    

Y'a des trucs un peu vilains (en fait réellement dégueulasses) et inutiles :).  
 
Première règle à suivre pour bien développer : on ne déclare pas de fonction en plein milieu dans la fonction principale XD!
 
ps : je n'ai pas cherché à vérifier si ça fonctionne, il doit sans doute manquer des trucs.
 

Code :
  1. <?php
  2.    /* déclarations */
  3.    function Rec($text)
  4.   {
  5.    $text = trim($text); // delete white spaces after & before text
  6.    return htmlspecialchars($text, ENT_QUOTES);
  7.   }
  8.  
  9.   function IsEmail($email)
  10.   {
  11.    $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$"; 
  12.    return eregi($pattern,$email); // bon sang que c'était laid!!!
  13.   }
  14. /* fin de déclarations */
  15. $html_header = '<html><body>'; //tant qu'à faire en cas d'erreur on peut préciser que le doc est en html ça sera un peu plus propre
  16. $html_footer = '</body></html>';
  17. $destinataire = 'xxxxx@xxxxx.fr';   
  18. // copie ? (envoie une copie au visiteur)
  19. $copie = 'oui'; // 'oui' ou 'non'
  20. $message_envoye = 'Votre message nous est bien parvenu !';
  21. $message_non_envoye = 'L'envoi du mail a échoué, veuillez réessayer SVP.';
  22. $message_erreur_formulaire = 'Vous devez d'abord <a href="form.html">envoyer le formulaire</a>.';
  23. $message_formulaire_invalide = 'Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.';
  24. if (!isset($_POST['envoi']))
  25.   echo  $html_header.'<p>'.$message_erreur_formulaire.'</p>'.$html_footer; // \n inutile vu que le <p> fait sauter une ligne
  26. }
  27. else
  28. {   
  29.   $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : ''; //forme correcte mais pas très lisible :-/
  30.   $prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
  31.   $tel = (isset($_POST['tel'])) ? Rec($_POST['tel']) : '';
  32.   //autant tout faire en une fois!
  33.   $email = '';
  34.   if (isset($_POST['email']) && IsEmail($_POST['email']) != false)
  35.       $email = Rec($_POST['email']);
  36.   $evenement = (isset($_POST['evenement'])) ? Rec($_POST['evenement']) : ''; 
  37.   $date = (isset($_POST['date'])) ? Rec($_POST['date']) : ''; 
  38.   $budget = (isset($_POST['budget'])) ? Rec($_POST['budget']) : '';
  39.   $adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
  40.   $personnes = (isset($_POST['personnes'])) ? Rec($_POST['personnes']) : '';
  41.   $infos = (isset($_POST['infos'])) ? Rec($_POST['infos']) : ''; 
  42.   $message = "\n\n".$budget."\n\n".$adresse."\n\n".$personnes."\n\n".$tel."\n\n".$date."\n\n".$infos."\n\n";  //évite de faire travailler inutilement le server php.
  43.   if (($nom != '') && ($prenom != '') && ($email != '') && ($evenement != '') && ($date != '') && ($budget != '') && ($adresse != '') && ($personnes != '') )
  44.   {
  45.     $headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n"; 
  46.     if ($copie == 'oui')
  47.        $cible = $destinataire.','.$email;
  48.     else 
  49.        $cible = $destinataire;
  50.    
  51.    if (mail($cible, $evenement, $message, $headers))
  52.       echo $html_header.'<p>'.$message_envoye.'</p>'.$html_footer;
  53.    else
  54.       echo $html_header.'<p>'.$message_non_envoye.'</p>'.$html_footer;
  55.   }
  56.   else
  57.      echo $html_header.'<p>'.$message_formulaire_invalide.' <a href="form.html">Retour au formulaire</a></p>'.$html_footer;
  58. } // fin du if (!isset($_POST['envoi']))
  59. ?>


Message édité par fodger le 28-01-2009 à 03:03:24
Reply

Marsh Posté le 29-01-2009 à 12:53:23    

bon be ok boss pour les declarations de fonctions faudra donc que j'evite de les mettre en plein milieu  
 
pour quand tu dis evites de faire travailler le serveur php j'ai été obligé de mettre les \n\n parce que c'était le foutoir quand ca arrivait dans ma boite mail ..(tout a la suite)
pour le formattage en html je sais  : pas tu m'as aiguillé avec $html_header = '<html><body>';  $html_footer = '</body></html>';
mais ca s'arrette la j'ai pas trouvé sur le net un tuto clair la dessus les tutos en general c'est voila c'est comme ca ils mettent tout en vrac mais detaillent rien (comme par ex dans le site du zero qui n'a malheureusement pas abordé la fonction mail)
 
en tous cas je te rassure ca marche très bien mais je voulais savoir simplement si c'etait sécurisé si y'avait pas de danger de hack mais vu que y'a pas acces a ma base de données que c'est direct du formualire a ma boite mail je pense pas mais je pose la question quand meme .
voila  
merci pour tes corrections ..

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed