Probleme requete :( (netbeans)
Résolu/Fermé
jimmylibilibob
Messages postés
13
Date d'inscription
dimanche 8 septembre 2013
Statut
Membre
Dernière intervention
4 décembre 2021
-
8 avril 2014 à 12:42
jimmylibilibob Messages postés 13 Date d'inscription dimanche 8 septembre 2013 Statut Membre Dernière intervention 4 décembre 2021 - 10 avril 2014 à 21:10
jimmylibilibob Messages postés 13 Date d'inscription dimanche 8 septembre 2013 Statut Membre Dernière intervention 4 décembre 2021 - 10 avril 2014 à 21:10
A voir également:
- Probleme requete :( (netbeans)
- L'opérateur ou l'administrateur a refusé la requête ✓ - Forum Windows
- Requête sql date supérieure à ✓ - Forum Programmation
- La requête graphql n’est pas autorisée facebook - Forum Facebook
- Requête sql pix - Forum Python
- Nos systèmes ont détecté un trafic exceptionnel sur votre réseau informatique. veuillez renvoyer votre requête ultérieurement. ✓ - Forum Virus
3 réponses
tksteph
Messages postés
204
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
3 janvier 2018
25
9 avril 2014 à 17:01
9 avril 2014 à 17:01
Bonjour,
Si tu sais utiliser le deboggeur, met un point d'arrêt sur la ligne de l'executeUpdate et rassure toi que c'est bien elle qui provoque cette erreur.
et utilise un alias pour ta table t_client (juste pour voir ce que ça donne)/
...(DELETE FROM t_client t WHERE t.nom = "+y)...
Si tu sais utiliser le deboggeur, met un point d'arrêt sur la ligne de l'executeUpdate et rassure toi que c'est bien elle qui provoque cette erreur.
et utilise un alias pour ta table t_client (juste pour voir ce que ça donne)/
...(DELETE FROM t_client t WHERE t.nom = "+y)...
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
9 avril 2014 à 20:55
9 avril 2014 à 20:55
Bonsoir,
Tu voudrais que ta requête finale soit
La réponse rapide serait donc de faire
C'est d'autant plus embêtant que tu pourrais faire ce que tu veux avec ta requête en prenant par exemple
C'est une grosse faille de sécurité (on appelle ça de l'injection sql)
Pour éviter ce genre de choses on a les PreparedStatement qui fonctionne en deux temps, tout d'abord tu mets des points d'interrogations à la place de tes arguments, donc
Tu voudrais que ta requête finale soit
DELETE FROM t_client WHERE nom="la valeur d'y"or ce que toi tu as c'est
DELETE FROM t_client WHERE nom=la valeur d'yce qui évidemment plante puisque tu n'as pas les guillemets.
La réponse rapide serait donc de faire
St.executeUpdate("DELETE FROM t_client WHERE nom=\""+y+"\"");mais si au lieu de mettre
la valeur d'ytu mettais des guillemets, par exemple
la "valeur" d'y, dans ce cas tu vas aussi planter ta requête car tu auras
DELETE FROM t_client WHERE nom="la "valeur" d'y"qui n'est pas bon non plus...
C'est d'autant plus embêtant que tu pourrais faire ce que tu veux avec ta requête en prenant par exemple
" OR id>0 OR nom="ta requête deviendrait donc
DELETE FROM t_client WHERE nom="" OR id>0 OR nom=""et ça te supprimera toute tes données !
C'est une grosse faille de sécurité (on appelle ça de l'injection sql)
Pour éviter ce genre de choses on a les PreparedStatement qui fonctionne en deux temps, tout d'abord tu mets des points d'interrogations à la place de tes arguments, donc
prepareStatement("DELETE FROM t_client WHERE nom=?");, puis tu utilises les méthodes pour associer chaque argument à sa valeur, par exemple un
setString(1,y);va mettre la valeur de y dans la requête en la formatant correctement, sans risque de modifier la requête.
jimmylibilibob
Messages postés
13
Date d'inscription
dimanche 8 septembre 2013
Statut
Membre
Dernière intervention
4 décembre 2021
10 avril 2014 à 21:10
10 avril 2014 à 21:10
Je te remercie énormément KX pour cette réponse plus que complète ! :)