PHP - Sécurisation du contenu d'un formulaire

Fermé
Martin - Modifié par crapoulou le 27/04/2015 à 00:42
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 27 avril 2015 à 12:30
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

jordane45 Messages postés 38202 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 8 juin 2024 4 676
Modifié par jordane45 le 27/04/2015 à 11:08
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 vendredi 30 mai 2014 Statut Membre Dernière intervention 27 juin 2016 130
27 avril 2015 à 11:59
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
27 avril 2015 à 12:30
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 vendredi 30 mai 2014 Statut Membre Dernière intervention 27 juin 2016 130
27 avril 2015 à 10:50
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