Probleme SQL dans java (injection ?)

Résolu
cs_manu00 Messages postés 93 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 25 octobre 2006 - 14 févr. 2006 à 14:26
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

6 réponses

shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
14 févr. 2006 à 16:05
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);
}
}
3
capoueidiablo Messages postés 316 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 1 février 2010 1
14 févr. 2006 à 14:39
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--
0
cs_manu00 Messages postés 93 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 25 octobre 2006
14 févr. 2006 à 14:44
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
0
cs_manu00 Messages postés 93 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 25 octobre 2006
14 févr. 2006 à 16:51
C'est super !!! C exactement ce que je voulais savoir !!

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
14 févr. 2006 à 19:37
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

++
0
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
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???????
0
Rejoignez-nous