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


Carouge10
Réponse acceptée

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

Bonjour,

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

Serg77
Auteur

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)

Serg77
Auteur

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.