Probleme SQL dans java (injection ?) [Résolu]

Messages postés
93
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
25 octobre 2006
- - Dernière réponse : nodnod32
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
25 juin 2009
- 9 mars 2009 à 12:47
hello,

J'ai fais un petit formulaire tout con en java.
On tape un mot et il retourne les resultats via un
SELECT * FROM matableWHERE nom LIKE '" + monnom + "' ORDER BY ID"

Bref tout fonctionne...

SAUF que lorsque je tape % ou %qqchose, ca me retourne tout les resultats.
J'ai donc peur qu'il soit possible de faire de l'injection SQL

C'est pourquoi je voulais savoir si il existait en java une solution pour parer à cela, c'est a dire, faire passer la requete par un filtre ou je ne sais quoi....

Merci de votre aide

Manu
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
405
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 juillet 2014
17
3
Merci
pour la requete que tu utilises, l'injection n'est pas réellemnt un risque.

par contre, ça le serait si elle servait à l'authentification.
soit une requete du genre :
"select nom, prenom where login='"+ leLogin +"' and passe='"+ lePass+"'"

l'injection consiterai à mettre comme mot de passe dans le formulaire : '%20OR%20'1'='1
ce qui donne la requete :
select nom, prenom where login='toto' and passe='' OR '1'='1'
qui est toujour vraie

pour se faire, il faut donc utilise les Prepare Statements:

String laRequete="select nom, prenom where login=? and passe=?";
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = this.getConnection();
ps = con.prepareStatement(laRequete);
ps.setString(1, leLogin);
ps.setString(2, lePasse);
rs = ps.executeQuery();


// Constitution du resultset
if (rs.next()) {
String lenom = rs.getString("nom");
}

} catch (SQLException se) {
logger.error(se.getMessage(), se);

} finally {
try {
rs.close();
ps.close();
con.close();
}
catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 212 internautes nous ont dit merci ce mois-ci

Commenter la réponse de shaiulud
Messages postés
316
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
1 février 2010
1
0
Merci
Et si au moment de l'envoi de ton formulaire tu faisais un



MaRecherche.replace('%', '') histoire de virer le caractère magique de SQL ...



Enfin s'que j'en dis ...
--Capoueidiablo--
Commenter la réponse de capoueidiablo
Messages postés
93
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
25 octobre 2006
0
Merci
ok mais le probleme, c'est pas vraiment le %
C'est plutot que si on peut faire ca, on peut surement injecter des commandes SQL non ?

Je ne sais pas trop. Si qqlun pouvait me dire.

Merci en tt cas pour l'astuce

Manu
Commenter la réponse de cs_manu00
Messages postés
93
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
25 octobre 2006
0
Merci
C'est super !!! C exactement ce que je voulais savoir !!

Merci
Commenter la réponse de cs_manu00
Messages postés
2837
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
0
Merci
Salut,
je confirme que cela te pare pour 90% des injections ! C'est LA solution de base pour sécuriser un peu son code, en plus c'est plus rapide à l'exécution car compilé ;-)

Sache qu'on peut faire bien pire avec une injection du style shutdown de ton serveur ou prise de controle de ton serveur // :s

++
Commenter la réponse de cs_neodante
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
25 juin 2009
0
Merci
bonjour
j'ai deux bases de données, et je voudrais lier deux tables dans les deux bases de données, je vous explique mon problème:

la première table contient comme entités : nom, prenom, adresse.que je peux imprimer comme rapport PDF
la deuxième table continet comme entités : nom, sexe, fonction
et je voudrais qu'a chaque fois qu'un utilisateur tape l'age, ca s'injecte dans la deuxième table que j'imprimerai en PDF par la suite(rapport avec comme entitées : nom, sexe, age, fonction.
comment faire cette injection, sans toucher à la deuxième base de données, faire un programme en java ou autre qui pourra me resolver le problème.

svp qui peut m'éclairer???????
Commenter la réponse de nodnod32