Sécurisé le value=""

Fermé
Eric51 - Modifié le 2 avril 2018 à 14:02
 Eric51 - 2 avril 2018 à 17:56
Bonjour,

Actuellement en train de réaliser un site web en tant qu'amateur passionner, je me rend compte que mon code est compromis. En effet, un système de grade est présent sur mon site, j'utilise donc un formulaire dans un système d'administration pour pouvoir donner un rang à un utilisateurs quelconque. Même si ce code se trouve dans une page sécurisé, je me retrouve à voir qu'avec le formulaire je peux modifier les value="" en inspectant l'élément puis par la suite envoyer le formulaire au serveur php. J'aimerais savoir comment je peux sécurisé le value="", car je l'utilise pratiquement dans tout mon site.

Voici mon code.

<?php if($admin == 100) {
      
      echo'<form action="" method="post">
        <div class="form-group" style="width:40%;display:inline-block;">
         <input type="txt" style="width:100%;" class="form-es" id="pseudo" name="pseudo" placeholder="Pseudonyme exacte" required>
        </div>
        <select class="form-es" style="width:40%;display:inline-block;padding:6px;" id="grade" name="grade">
         <option id="grade" name="grade" value="1" selected>Joueur</option>
         <option id="grade" name="grade" value="22" >Membre</option>
         <option id="grade" name="grade" value="23" >VIP</option>
         <option id="grade" name="grade" value="24" >Donateur</option>
         <option id="grade" name="grade" value="25" >Partenaire</option>
         <option id="grade" name="grade" value="30" >Joueur E-Sport</option>
         <option id="grade" name="grade" value="31" >Capitaine Team E-Sport</option>
         <option id="grade" name="grade" value="34" >Streameur</option>
         <option id="grade" name="grade" value="35" >Youtubeur</option>
         <option id="grade" name="grade" value="40" >Staff Serveur</option>
         <option id="grade" name="grade" value="45" >Staff HR Serveur</option>
         <option id="grade" name="grade" value="50" >Co-Responsable Serveur</option>
         <option id="grade" name="grade" value="55" >Responsable Serveur</option>
         <option id="grade" name="grade" value="60" >Graphiste</option>
         <option id="grade" name="grade" value="65" >Développeur</option>
         <option id="grade" name="grade" value="70" >Responsable E-Sport</option>
         <option id="grade" name="grade" value="75" >Responsable Gaming</option>
         <option id="grade" name="grade" value="80" >Responsable Twitch</option>
         <option id="grade" name="grade" value="90" >Support Multigaming</option>
         <option id="grade" name="grade" value="95" >Community Manager</option>
         <option id="grade" name="grade" value="98" >Assistant Multigaming</option>
        </select>
        <input type="submit" value="UPGRADE" name="upgrade" class="title_grey" style="width:18%;display:inline-block;border:0px;padding:5px;border: 1px solid #DDDDDD;background:none;color:#7EB913;" />
      </form>';
     } ?>


if(isset($_POST['upgrade'])) {
      $grade  = htmlentities($_POST['grade']);
      $pseudo  = html_entity_decode($_POST['pseudo']);
      
      if(!empty($pseudo)) {
       
       $rq_add = $dbc->prepare("UPDATE users SET Rank = ? WHERE Name = ?");
       $rq_add->execute(array($grade, $pseudo));
       echo '<div class="alert alert-success alert-dismissable" style="margin-bottom:0px"><i class="fas fa-user-circle"></i> Vous avez mise à jour le grade de '.html_entity_decode($_POST['pseudo']).'.</div><br>';
       
      } else {
       echo '<div class="alert alert-danger alert-dismissable" style="margin-bottom:0px"><i class="fa fa-warning"></i> Vous devez remplir tous les champs.</div><br>';
      }
     }


EDIT : Ajout du langage dans les balises de code.

En vous remerciant de votre aide.

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
2 avril 2018 à 14:04
Bonjour,

En modifiant quelles value ?
Tu veux protéger quoi exactement ?
Si la page du formulaire est dans un espace sécurisé ... quel est le souci ?

Merci d'apporter ces quelques précisions si tu souhaites obtenir des réponses;

NB: A l'avenir, merci de préciser le langage dans les balises de code
voir ici pour les explications : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

NB² : Ta question concernant le code PHP, merci à l'avenir, de la placer dans le bon forum ... (je la déplace pour cette fois ).

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
2 avril 2018 à 14:05
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
2 avril 2018 à 14:06
Ah...et....
les fonctions htmlspecialchar ou htmlentities sont à utiliser lors de l'affichage. En aucun cas lors de l'insertion des données en BDD.
0
Salut Jordane, ouais désoler pour tout ça, je suis amateur aussi sur ce forum. Pour la fonction htmlentities, tu me conseil de remplacer par quoi ?

Et pour mon histoire, je te fait ça plus simple. Genre j'ai un formulaire avec des value comme tu peux le voir avec genre 80 90, mais je peux remplacer ces value en inspectent l'élément puis les remplacer par n'importe les quelles, genre 100 celle que je ne veux pas. Et quand la requete s'envoie au serveur je me retrouve avec 100 au lieu de 90 ou 80 tu vois ? Enfaite ce que je veux c'est que le value ne soit pas éditable ou en dans l'inspection de l'élément mais comme je sais que c'est impossible je sais pas comment sécurisé ça.

Et du coup pour répondre à ta question, même si cette page est accessible uniquement à certaine personne bien select j'aimerais quand même la sécurisé, surtout que j'utilise ce genre de formulaire partout dans le site et parfois dans des zones qui sont accessible par des utilisateurs lambda.

Voilà j'espère que tu pourra m'aider.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
2 avril 2018 à 17:37
Tu peux, à la limite, disposer des "valeurs autorisées" dans ta BDD.
et alimenter tes champs, non pas avec les valeurs elles-mêmes... mais avec leurs ID.
Ainsi, Avant l'enregistrement, tu peux aller vérifier en BDD que la valeur est autorisée ou non.
Mais tu ne pourras pas faire grand chose de plus.... et surtout pas empêcher d'éditer dans le navigateur.

Et pour
Pour la fonction htmlentities, tu me conseil de remplacer par quoi ?

Ben rien... vu que tu utilises les requêtes préparées... tu n'as rien d'autre à utiliser.

Et au cas où, pour éviter les soucis d'encodage des caractères, il te suffit de tout mettre en UTF8
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
0
Ca va pour l'encodage je gère. Ba écoute merci de ton aide Jordane.
0