Partage
  • Partager sur Facebook
  • Partager sur Twitter

Securiser un champ de formulaire

    29 janvier 2015 à 13:14:39

    Salut je souhaite savoir comment sécurisé mon champ de formulaire , genre htmlspecialchars ou htmlentites ....

    la syntaxe par rapport à mon champ, où le placer exactement et qu'elle est la meilleur protection, merci à vous.

    <?php if (isset ($_POST['password']));?>

     Est ce correct, ceci:

    <?php  isset (htmlspecialchars ($_POST['newpassword']));?>





    -
    Edité par blinz 29 janvier 2015 à 13:17:38

    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2015 à 13:16:43

      "sécurité" ça veut tout et rien dire. Tout dépend du contexte/où tu utilises ta variable.

      La protection à appliquer dépend où tu l'utilises (XSS vs injections SQL), de ton code (par rapport à SQL : requête préparée ou pas, de l'extension - pdo vs mysql vs mysqli), etc.

      Ton instruction au mieux ne sert à rien (à cause du ; qui suit le if). Ce n'est pas le champ de formulaire qu'on sécurise mais la donnée que l'on reçoit pour celui-ci. isset n'a rien de sécuritaire, ça permet juste de savoir si une variable existe ou pas (en gros).

      -
      Edité par julp 29 janvier 2015 à 13:20:32

      • Partager sur Facebook
      • Partager sur Twitter
        29 janvier 2015 à 13:20:11


        J'utilise PDo, requete préparé , voici mon formulaire complet, je cherche à sécurisé le tout au mieux...

         <?php              
                           $erreurs = array();
        				   
        
                           if(!empty($_POST)) {
        					   
        				   //Verification du champ email( on vérifie si le champ n'est pas vide )
        					if($_POST['email'] != "" && !preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$_POST['email'])){
        					$erreurs['email'] = "Veuillez verifier la saisie de votre e-mail";
        					}
        					
        				   //Verification du téléphone
        				   if($_POST['phone'] != "" && !preg_match("#^0[1-68]([-. ]?[0-9]{2}){4}$#",$_POST['phone'])){
        					$erreurs['phone'] = "Veuillez verifier la saisie de votre téléphone";
        					}
        					
        					
        						//Verification du doublon des mots de passe
        						if($_POST['password'] != $_POST['newpassword']){
        						$erreurs['password'] = "les mots de passe ne sont pas identique";
        						}
        						
        						
        
                           if( empty( $erreurs)  ){
        	 
        				   // On selectionne les champ à modifier			
        				   $modif = $bdd->prepare("UPDATE client_user SET phone =:phone,  email =:email, id_region=:id_region, password =:password, id_departements=:id_departements WHERE id_client_user =".$_SESSION['membre']['id_client_user']);
        				   
        				   
        
                          // on envoi les champ à modifier
                          $modif->execute(array(
                          'phone' => $_POST['phone'],
                          'email' => $_POST['email'],
        				  'id_region'=>regionIdByDepartement($_POST['departements']),
        				  'password' => sha1($_POST['password']),
        		  		  'id_departements'=>$_POST['departements']
                          ));
        				  
        				  
          
        				 //Message d'avertissement               
        				 echo '<div class="container"><div class="col-md-6 col-md-offset-2 col-sm-8 col-sm-offset-2">
        				<div class="alert alert-success okay" role="alert"> <i class="fa fa-smile-o"></i>
        			    Vos modifications ont bien était prise en compte</div></div></div>';
        
        				}else{//le tableau ne contient
        				echo '<div class="container"><div class="col-md-6 col-md-offset-2 col-sm-8 col-sm-offset-2"><br>
        					<div class="alert alert-danger okay" role="alert">Renseignez les champs  vides</div></div></div>';
        				}
        				
        				}//fin de la soumission du formulaire
        				
        				 $reponse = $bdd->query('SELECT * FROM client_user WHERE id_client_user = '.$_SESSION['membre']['id_client_user']);
        				 $donnees = $reponse->fetch(PDO::FETCH_ASSOC);
        
                       ?>
                       
                       
                      
                      
           
                    <div class="container">
                    <div class="row">
                <div class="col-md-6 col-md-offset-2 col-sm-8 col-sm-offset-2">
         
                <br>
           
                <form class="ins_con"  action="mon_profil_client.php" method="post" enctype="multipart/form-data" onSubmit="return(VerifForm(this))">
        
                <label for="departement">Departement </label>
                <select class="form-control" name="departements" id="departement">
                <option value="">Votre département</option>
                 <?php $departement = !empty($donnees['id_departements']) ? $donnees['id_departements'] : NULL; echo aRegionDepartement(NULL, $departement); ?>
                </select>
            		<br>
        
               <label for="email">email :</label>
               <input class="form-control" type="text" id="email" name="email" value="<?php echo !empty($donnees['email']) ? htmlentities($donnees['email']) : NULL;?>" />
             
               <br>
             
              <label for="phone">Télephone</label>
              <input class="form-control" type="text" id="phone" name="phone" value="<?php echo !empty($donnees['phone']) ? htmlentities($donnees['phone']) : NULL; ?>" />
              
        		<hr>
                
               <label for="email">Nouveau mot de passe:</label>
               <input class="form-control" type="text" id="password" name="password" value="<?php if (isset ($_POST['password']));?>" />
               
               <br>
               
               <label for="email">Confirmer mot de passe:</label>
               <input class="form-control" type="text" id="password" name="newpassword" value="<?php  isset (htmlspecialchars ($_POST['newpassword']));?>" />
               <?php if(isset($erreurs['password'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['password'].'</div>';?>
        
               <br>
               
               <input class="find" type="submit" value="ENVOYER">
               </form>



        -
        Edité par blinz 29 janvier 2015 à 13:21:36

        • Partager sur Facebook
        • Partager sur Twitter
          29 janvier 2015 à 13:28:36

          Sur les requêtes : pourquoi les variables de session ne font pas aussi l'objet d'un paramètre ? Elles ne sont pas censées être à l'origine d'une injection SQL mais il vaut mieux prendre trop de précautions que ...

          Sur l'affichage du résultat du SELECT, il manque éventuellement des htmlentities et ton if (isset ($_POST['password']));, comme je l'ai déjà dit, ne sert à rien.

          Le sha1 seul, en 2015, ça ne fait pas très sérieux : ça revient à stocker les mots de passe en clair aujourd'hui (les dictionnaires existent toujours).

          Avant d'utiliser $donnees, ça pourrait être bien de vérifier qu'elle ne vaut pas FALSE (pas de ligne qui correspond).

          -
          Edité par julp 29 janvier 2015 à 13:34:05

          • Partager sur Facebook
          • Partager sur Twitter
            29 janvier 2015 à 13:30:19

            Je ne laisse pas mon value vide , si ?

            <label for="email">Confirmer mot de passe:</label>
                   <input class="form-control" type="text" id="password" name="newpassword" value="" />
                   <?php if(isset($erreurs['password'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['password'].'</div>';?>


            et pour mon select comment utiliser les htmlenties, ou le placer ...

            <select class="form-control" name="departements" id="departement">
                    <option value="">Votre département</option>
                     <?php $departement = !empty($donnees['id_departements']) ? $donnees['id_departements'] : NULL; echo aRegionDepartement(NULL, $departement); ?>
                    </select>



            -
            Edité par blinz 29 janvier 2015 à 13:31:20

            • Partager sur Facebook
            • Partager sur Twitter
              29 janvier 2015 à 13:38:08

              Je ne laisse pas mon value vide , si ?

              Tu fais ce que tu veux. Je dis simplement que ton instruction ne fait rien.

              pour mon select comment utiliser les htmlenties

              Sur ton extrait, on pourrait s'en passer, je suppose, mais la démarche c'est un htmlentities (ou htmlspecialchars) pour chaque echo (ou du moins partie - l'appliquer sur les données injectées par concaténation - ie echo '...' . htmlspecialchars($donnees['foo']) . ' - ' . htmlspecialchars($donnees['bar']) . '...').

              -
              Edité par julp 29 janvier 2015 à 13:40:50

              • Partager sur Facebook
              • Partager sur Twitter
                29 janvier 2015 à 21:52:29

                Donc je peut faire quelque chose comme ceci ou c'est mal écrit ?

                 <input class="form-control" type="text" name="pseudo" placeholder="Votre pseudo" value="<?php if(isset($_POST['pseudo'])) echo htmlentities ($_POST['pseudo']);?>" /></div> 



                -
                Edité par blinz 29 janvier 2015 à 21:53:15

                • Partager sur Facebook
                • Partager sur Twitter
                  30 janvier 2015 à 0:34:33

                  et du coup pour les autres j'ai fait comme ceci, est ce correct ?

                  <?php echo  !empty($donnees['email']) ? htmlentities($donnees['email']) : NULL;?>

                  Merci encore

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 janvier 2015 à 0:40:37

                    Oui mais le test n'est pas utile, htmlentities peut être appliquée à $donnees['email'] même si elle est vide.

                    -
                    Edité par julp 30 janvier 2015 à 0:41:52

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Securiser un champ de formulaire

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown