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

Signaler
Messages postés
93
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
25 octobre 2006
-
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
25 juin 2009
-
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

Messages postés
405
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 juillet 2014
19
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);
}
}
Messages postés
316
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
1 février 2010
1
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--
Messages postés
93
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
25 octobre 2006

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
Messages postés
93
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
25 octobre 2006

C'est super !!! C exactement ce que je voulais savoir !!

Merci
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
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

++
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
25 juin 2009

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???????