Inspecter l'element sur un <option>

Par Serg77, il y a 10 ans


Bonjour, j'ai un petit problème avec mon formulaire de modification, par exemple quand je vais sur inspecter l'element et que je modifie la value="" de mon age par value="55555dsqd" et que je valide avec le bouton, il va me le mettre dans la bdd.

Comment faire pour empécher une attaque de se genre ?

Voici mon script :

<form method="post" action="parametres.php?a=profil"> <?php $req = $bdd->prepare("SELECT pseudo, prenom, nom, email,description, affiche, age FROM membre, login WHERE membre.id_login = :idsession AND membre.id_login = login.id"); $req->execute(array('idsession' => $_SESSION['id'])); while($data = $req->fetch()) { ?> <div class="parametresbloc"> <div class="parametrespseudo"> <label for="pseudo">Votre pseudo </label> </div> <input type="text"disabled="disabled" value="<?php echo $data['pseudo'];?>" name="pseudo" /> </div> <div class="parametresbloc"> <div class="parametresprenom"> <label for="prenom">Votre prenom *</label> </div> <input type="text" name="prenom" value="<?php echo $data['prenom'];?>" required /> </div> <div class="parametresbloc"> <div class="parametresnom"> <label for="nom">Votre nom *</label> </div> <input type="text" name="nom" value="<?php echo $data['nom'];?>" required /> </div> <div class="parametresbloc"> <div class="parametresemail"> <label for="email">Votre email </label> </div> <input type="text" name="email" disabled="disabled" value="<?php echo $data['email'];?>" required /> </div> <div class="parametresbloc"> <div class="parametresdescription"> <label for="description">Votre description *</label> </div> <textarea name="description"><?php echo $data['description'];?></textarea> </div> <div class="parametresbloc"> <div class="parametresage"> <label for="age">Votre âge *</label> </div> <select name="age"> <?php for ($i=13; $i<=100; $i=$i+1) { ?> <option value="<?php echo $i;?>"><?php echo $i;?></option> <?php } ?> </select> </div> <div class="parametresbloc"> <div class="parametressubmit"> <input type="submit" class="btnturcplus" name="btninfo" value="Modifier"/> </div> </div> <?php } ?> </form> <?php if(isset($_POST['btninfo'])) { $prenom = ucfirst(htmlspecialchars($_POST['prenom'])); $nom = ucfirst(htmlspecialchars($_POST['nom'])); $description = htmlspecialchars($_POST['description']); $age = htmlspecialchars($_POST['age']); if($prenom == true && $nom == true && $description == true && $age == true ) { if(strlen($prenom) < 10 && strlen($prenom) > 2 && strlen($nom) < 10 && strlen($nom) > 2 && strlen($description) < 300) { if(preg_match('~[A-Z][a-z]*(-[A-Z][a-z]?)?~', $prenom)) { if(preg_match('~[A-Z][a-z]*(-[A-Z][a-z]?)?~', $nom)) { $stmt = $bdd->prepare('UPDATE membre SET prenom = :prenom, nom = :nom, description=:description, age = :age WHERE id_login=:idsession '); $stmt->execute(array( ':idsession' => $_SESSION['id'], ':prenom' => $prenom, ':nom' => $nom, ':description' => $description, ':age' => $age, )); echo "Vos modifications ont été effectuées avec succès!"; } else { echo "Votre nom ne doit pas contenir de caractères spéciaux."; } } else { echo "Votre prenom ne doit pas contenir de caractères spéciaux."; } } else { echo "Veuillez respecter le format requis."; } } else { echo "Veuillez remplir tous les champs."; } } ?>

4 réponses

Serg77, il y a 10 ans

Bonjour, oui mais ça va ne pas résoudre le problème imaginons j'entre une valeur 9999999999999 alors que le for va de 13 à 100 (pour l'age)

Carouge10, il y a 10 ans

Je ne vois pas où est le soucis.
Il faut toujours vérifier que les données reçu correspondent à nos attentes, donc on vérifie que l'age est compris entre 13 et 100

Serg77, il y a 10 ans

Ah ouais d'accord, donc un simple if($age >= 13 AND $age <=100) fait l'affaire, moi je pensais fallait mettre une sécurité etc.

Carouge10, il y a 10 ans

Bonjour,

Utiliser la fonction is_numeric avant de rentrer les données dans la bdd