PHP - Sécurisation du contenu d'un formulaire

Martin -  
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   -
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 235 Date d'inscription   Statut Membre Dernière intervention   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 2826 Date d'inscription   Statut Membre Dernière intervention   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 235 Date d'inscription   Statut Membre Dernière intervention   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