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"
A voir également:

2 réponses

jordane45 Messages postés 40050 Statut Modérateur 4 758
 
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
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
Pitet Messages postés 2845 Statut Membre 527
 
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
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