SQL Requêtes préparées
Publié : jeu. 23/mars/2017 12:33
Je pense que 100% des requêtes (y compris les miennes) de mises à jour de bases de données que j'ai pu voir sur ce forum sont vulnérables.
■ Exemples partiels de requêtes vulnérables..ou
Si vos données comportent des apostrophes ou des guillemets, il ne sera pas possible de mettre à jour votre bases de données.
■ la solution : Les requêtes préparées.
Une requête préparée consiste à remplacer les variables encadrées par des guillemets ou des apostrophes par des points interrogation.
Reprenons le dernier exemple de requête vulnérable.
Chr(34) + nom + Chr(34) sera remplacé par un simple ?
■ Mise en oeuvre avec un exemple d'insertion d'enregistrement.le premier ? aura l'index 0 le second ? aura l'index 1 et le troisième ? aura l'index 2
Et enfin, il faut maintenant mettre à jour ces indexs et appliquer la mise à jour.
En rapport avec ce sujet.
- Créer et mettre à jour une base de données Sqlite (Une refonte est en cours)
■ Exemples partiels de requêtes vulnérables..
Code : Tout sélectionner
psSQLRequest = "UPDATE contacts SET "
psSQLRequest + "contact_Numero_Client='" +GetGadgetText(#String_0)+"', "
psSQLRequest + "contact_Numero_Facture='" +GetGadgetText(#String_1)+"', "
psSQLRequest + "contact_Numero_Contrat='" +GetGadgetText(#String_2)+"', "
psSQLRequest + "contact_prenom='" +GetGadgetText(#String_3)+"', "
Code : Tout sélectionner
;Préparation de la requete de création
ReqSql = "insert into contacts (nom, prenom, age) values ("
ReqSql + Chr(34) + nom + Chr(34)+Chr(44)
ReqSql + Chr(34) + note + Chr(34)+Chr(44)
ReqSql + Chr(34) + age + Chr(34)+")"

■ la solution : Les requêtes préparées.
Une requête préparée consiste à remplacer les variables encadrées par des guillemets ou des apostrophes par des points interrogation.
Reprenons le dernier exemple de requête vulnérable.

■ Mise en oeuvre avec un exemple d'insertion d'enregistrement.
Code : Tout sélectionner
ReqSql = "insert into contacts (name, note, age) values (?,?,?)"
Et enfin, il faut maintenant mettre à jour ces indexs et appliquer la mise à jour.
Code : Tout sélectionner
SetDatabaseString(Database, 0, GetGadgetText(#Name))
SetDatabaseString(Database, 1, GetGadgetText(#Note))
SetDatabaseString(Database, 2, GetGadgetText(#Age))
DatabaseUpdate(Database, ReqSql)
- Créer et mettre à jour une base de données Sqlite (Une refonte est en cours)