PHP - Sécurisation du contenu d'un formulaire
Martin
-
Pitet Messages postés 2845 Statut Membre -
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.
Par exemple :
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"
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
-
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);-
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é.
-
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
-
-
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')