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

cs_manu00 93 Messages postés jeudi 19 décembre 2002Date d'inscription 25 octobre 2006 Dernière intervention - 14 févr. 2006 à 14:26 - Dernière réponse : nodnod32 17 Messages postés samedi 14 février 2009Date d'inscription 25 juin 2009 Dernière intervention
- 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 

Votre réponse

6 réponses

Meilleure réponse
shaiulud 405 Messages postés mardi 18 décembre 2001Date d'inscription 15 juillet 2014 Dernière intervention - 14 févr. 2006 à 16:05
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);
}
}

Merci shaiulud 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de shaiulud
capoueidiablo 316 Messages postés jeudi 9 janvier 2003Date d'inscription 1 février 2010 Dernière intervention - 14 févr. 2006 à 14:39
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
cs_manu00 93 Messages postés jeudi 19 décembre 2002Date d'inscription 25 octobre 2006 Dernière intervention - 14 févr. 2006 à 14:44
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
cs_manu00 93 Messages postés jeudi 19 décembre 2002Date d'inscription 25 octobre 2006 Dernière intervention - 14 févr. 2006 à 16:51
0
Merci
C'est super !!! C exactement ce que je voulais savoir !!

Merci
Commenter la réponse de cs_manu00
cs_neodante 2837 Messages postés lundi 11 août 2003Date d'inscription 16 décembre 2006 Dernière intervention - 14 févr. 2006 à 19:37
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
nodnod32 17 Messages postés samedi 14 février 2009Date d'inscription 25 juin 2009 Dernière intervention - 9 mars 2009 à 12:47
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.