JDBC
Fermé
seif_29
Messages postés
4
Date d'inscription
vendredi 20 décembre 2013
Statut
Membre
Dernière intervention
4 mai 2014
-
18 janv. 2014 à 01:57
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 18 janv. 2014 à 11:32
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 18 janv. 2014 à 11:32
3 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 18/01/2014 à 11:34
Modifié par KX le 18/01/2014 à 11:34
Je rejoins l'avis de Polux31, il manque des apostrophes :
Cependant il ne faut pas faire ce genre de code, car ce n'est pas du tout sûr !
Voici par exemple ce qu'il est possible de faire :
Cela va donner la requête suivante :
La requête ne respecte pas la syntaxe SQL à cause des mauvaises ouvertures et fermetures des chaines de caractères. Cela va donc te générer une exception et planter ton programme.
Plus dramatique, on pourrait faire quelque chose comme ceci :
Cela reviendrait à faire ces commandes SQL :
La deuxième commande va totalement effacer ta base de donnée, c'est une énorme faille de sécurité de ton programme ! On appelle ça de l'injection SQL.
Lorsque ta commande SQL prend des paramètres, comme ici, il faut utiliser des PreparedStatement pour te prémunir contre ce genre de problème. Exemple :
La confiance n'exclut pas le contrôle
" cde_li = '" + code_liv + "' and cin_e = '" + code_etud + "';"
Cependant il ne faut pas faire ce genre de code, car ce n'est pas du tout sûr !
Voici par exemple ce qu'il est possible de faire :
String cde_li = "aujourd'hui", cin_e ="";
Cela va donner la requête suivante :
SELECT count(*) as nbre FROM emprunt where cde_li = 'aujourd'hui' and cin_e = '';
La requête ne respecte pas la syntaxe SQL à cause des mauvaises ouvertures et fermetures des chaines de caractères. Cela va donc te générer une exception et planter ton programme.
Plus dramatique, on pourrait faire quelque chose comme ceci :
String cde_li = "'; DROP DATABASE database; --", cin_e ="";
Cela reviendrait à faire ces commandes SQL :
SELECT count(*) as nbre FROM emprunt where cde_li = ''; DROP DATABASE database; --' and cin_e = '';
La deuxième commande va totalement effacer ta base de donnée, c'est une énorme faille de sécurité de ton programme ! On appelle ça de l'injection SQL.
Lorsque ta commande SQL prend des paramètres, comme ici, il faut utiliser des PreparedStatement pour te prémunir contre ce genre de problème. Exemple :
Connection con = db_biblioConnection.getInstance(); PreparedStatement stmt = con.prepareStatement( "SELECT count(*) as nbre FROM emprunt where cde_li = ? and cin_e = ?"); stmt.setString(1, cde_li); stmt.setString(2, cin_e); ResultSet result_4 = stmt.executeQuery();
La confiance n'exclut pas le contrôle
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
18 janv. 2014 à 09:57
18 janv. 2014 à 09:57
Bonjour,
Soit il manque des côtes, soit il y en a en trop !!!
Quel type ont les champs cde_li et cin_e ?
Soit il manque des côtes, soit il y en a en trop !!!
Quel type ont les champs cde_li et cin_e ?
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
18 janv. 2014 à 11:10
18 janv. 2014 à 11:10
Et la requête exécutée à la ,main elle retourne quoi?