Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sécurisation de formulaire

    18 novembre 2017 à 10:40:10

    Bonjour, 

    Suite à la création de tout un système de support j'aurais aimé avoir vos avis sur la sécurisation que j'ai effectué au niveau du traitement des mes formulaires.

    Voici le code PHP qui récupère mon formulaire:

    if(isset($_POST['typeSupport']) && isset($_POST['probleme'])) {
            $typeSupport = Secu($_POST['typeSupport']);
            $serveur = Secu($_POST['serveur']);
            $probleme = Secu($_POST['probleme']);
            $countTicket = $database->prepare("SELECT COUNT(*) AS Account FROM tickets WHERE idCli = ? AND etat = ? OR etat = ?");
            $countTicket->execute(array($user['idCli'],0,1));
            $Counter = $countTicket->fetch();
            if(!empty($probleme)) {
                //if($Counter['Account'] < 1) {
                    $sendDemande = $database->prepare("INSERT INTO tickets (idCli,support,retro_id,etat,probleme) VALUES (?,?,?,?,?)");
                    $sendDemande->execute(array($user['idCli'],$typeSupport,$serveur,0,$probleme));
                    $success = "Votre demande à bien été transmis au support. Vous aurez une réponse dans 24H";
           // } else {
          //$message = "Vous ne pouvez faire qu'une demande de ticket à la fois";
            //}
    
        } else {
          $message = "Merci de remplir les champs vident";
        }
    }



    Et voici le code HTML de mon formulaire

    <form action="" method="post">
          <div class="row">
              <div class="col-md-6">
                  <div class="form-group">
                      <label for="sel1">Support concerné</label>
                      <select class="form-control" id="sel1" name="typeSupport">
                        <option value="Technique" seleted>Technique</option>
                        <option value="Commercial">Commercial</option>
                      </select>
                  </div>
              </div>
              <div class="col-md-6">
                  <div class="form-group">
                      <label for="sel1">Serveur concerné</label>
                      <select class="form-control" id="sel1" name="serveur">
                          <?php
                          $serveurForUser = $database->prepare("SELECT * FROM serveurs WHERE idCli = ?");
                          $serveurForUser->execute(array($user['idCli']));
                          while($sFU = $serveurForUser->fetch()) {
                          ?>
                        <option value="<?php echo SecuText($sFU['nom']) ?>"><?php echo SecuText($sFU['nom']) ?></option>
                        <?php } ?>
                      </select>
                  </div>
              </div>
          </div>
          <div class="row">
              <div class="col-md-12">
                  <div class="form-group">
                    <label for="comment">Quel est votre problème ?</label>
                    <textarea class="form-control" name="probleme" rows="5" id="comment"></textarea>
                    <script>
                      CKEDITOR.replace( 'probleme' );
                    </script>
                  </div>
              </div>
          </div>
          <div class="text-center">
              <button type="submit" class="btn btn-info btn-fill btn-wd">Envoyer ma demande</button>
          </div>
          <div class="clearfix"></div>
      </form>



    Je vous met aussi mes deux fonctions, Secu et SecuText

    function Secu($str)
    	{
    		$st = strip_tags($str);
    		$str = htmlspecialchars($str,ENT_QUOTES);
    		return $str;
    	}
    function SecuText($text)
    	{
    		$textSecu = htmlentities($text);
    		return $textSecu;
    	}

    Merci de me signaler si des choses sont a corriger afin d'éviter de laisser trainer des failles dans mon code.

    De plus au niveau de mes requetes préparées j'aurais aimé savoir si elles étaient bien formées et adaptées aux normes PDO

    Merci d'avance

    Cordialement



    -
    Edité par Nirwox 18 novembre 2017 à 10:42:04

    • Partager sur Facebook
    • Partager sur Twitter
      18 novembre 2017 à 11:04:26

      Bonjour,

      il y en a plutôt trop que pas assez ;)

      Tes fonctions ne sont utiles que pour l'affichage, inutiles dans les requêtes. C'est le fait d'avoir une requête préparée qui fait la sécurisation contre les injections SQL de ce côté là.

      Dans un autre registre, ta condition ligne 1 n'a pas de sens : isset() vérifie si les variables existent pas si elles sont vides.

      • Partager sur Facebook
      • Partager sur Twitter
        18 novembre 2017 à 11:08:18

        philodick a écrit:

        Bonjour,

        il y en a plutôt trop que pas assez ;)

        Tes fonctions ne sont utiles que pour l'affichage, inutiles dans les requêtes. C'est le fait d'avoir une requête préparée qui fait la sécurisation contre les injections SQL de ce côté là.

        Dans un autre registre, ta condition ligne 1 n'a pas de sens : isset() vérifie si les variables existent pas si elles sont vides.

        Merci pour ta réponse. Donc mes deux fonctions sont inutiles ? C'est à dire que ma requête sécurise déjà tout ? 

        Et pour isset(), c'est pour déclencher le code PHP afin de traiter la demande, sans isset() mon code ne fonctionne pas

        Cordialement

        • Partager sur Facebook
        • Partager sur Twitter
          18 novembre 2017 à 11:13:59

          Elles ne sont pas inutiles puisque tu les utilises à l'affichage de ton formulaire. Mais elles ne sont destinées qu'à prévenior les failles XSS, pas les injections SQL.

          Pour le isset, tu devrais remplacer par !empty puisque dans ton else tu mets que les champs sont vides.

          • Partager sur Facebook
          • Partager sur Twitter
            18 novembre 2017 à 11:52:06

            philodick a écrit:

            Elles ne sont pas inutiles puisque tu les utilises à l'affichage de ton formulaire. Mais elles ne sont destinées qu'à prévenior les failles XSS, pas les injections SQL.

            Pour le isset, tu devrais remplacer par !empty puisque dans ton else tu mets que les champs sont vides.


            Ok je vais m'occuper du isset() et comment puis je me protéger contre les injections SQL ?

            -
            Edité par Nirwox 18 novembre 2017 à 11:52:41

            • Partager sur Facebook
            • Partager sur Twitter
              18 novembre 2017 à 12:17:43

              Tu te protège déjà en utilisant des requêtes préparées.
              • Partager sur Facebook
              • Partager sur Twitter
                18 novembre 2017 à 12:46:58

                philodick a écrit:

                Tu te protège déjà en utilisant des requêtes préparées.


                D'accord donc d'après toi mes formulaires sont sécurisés ?
                • Partager sur Facebook
                • Partager sur Twitter

                Sécurisation 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