PHP - Sécurisation du contenu d'un formulaire

Martin -  
Pitet Messages postés 2845 Statut Membre -
Bonjour,
Je suis en train de développer un petit site en php mais j'ai remarqué un petit soucis : si je met des côtes simples l'insertion dans la base de donné ne se fait pas.

$bdh->exec("INSERT INTO jeux_video(possesseur,jeu) VALUES('$possesseur','$jeu')");


Par exemple :

$bdh->exec("INSERT INTO jeux_video(possesseur,jeu) VALUES('Martin','L'arche perdue')");

ou dans ce cas le champ jeu ne contient que le "L" et l'ajout ne se fait même pas a cause du "arche perdue"

2 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,
    Non, ce n'est pas bon du tout....
    A la limite.. il peut echapper son apostrophe ( avec un BackSlash).... (via l'instruction PHP addslashes )
    mais vu qu'il semble utiliser la PDO... il est préférable d'utiliser les instructions PREPARE

    $sql = "INSERT INTO jeux_video(possesseur,jeu) VALUES(:possesseur,:jeu)";
    $a_data = array(":possesseur"=>$possesseur,":jeu"=>$jeu);
    $prepare = $bdh->prepare($sql);
    $prepare->execute($a_data);
    
    
    1
    1. VlkPr3s Messages postés 251 Statut Membre 130
       
      Pourquoi faire compliqué quand on peut faire simple :) L'utilisation du backslash ou du double simple guillemet fonctionne aussi très bien chez moi. Du moment ou il essaie d'accéder à un élément inexistant dans les valeurs c'est tout à fait normal son erreur. C'est pour ça que je lui ai fait remarqué que d'envoyer les valeurs comme il le fait est totalement erroné.
      0
    2. Pitet Messages postés 2845 Statut Membre 530
       
      L'utilisation du backslash ou du simple guillemet est une mauvaise pratique car spécifique à un SGBD.
      Les bonnes pratiques recommandent d'utiliser les fonctions spécialement dédiées pour éviter les injections sql tel que les requêtes préparées, PDO::quote() ou mysqli_real_escape_string() selon l'API utilisée ce qui permet de s'affranchir du type de SGBD utilisé et donc de faciliter le développement et la maintenance des accès bdd.

      Plus d'info : https://www.php.net/manual/fr/security.database.sql-injection.php#security.database.avoiding
      0
  2. VlkPr3s Messages postés 251 Statut Membre 130
     
    Logique tu lui renseigne trois argument alors que tu définis que deux valeurs ...
    soit tu fais VALUES('Martin','L','arche perdue')
    ou alors VALUES('Martin','L''arche perdue')
    -3