Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/12/2012, 16h46   #1
teribilis
Invité de passage
 
Inscription : novembre 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 7
Points : 0
Points : 0
Par défaut Application bancaire sécurisée avec login/mdp

Bonjour,

Alors je développe une application "bancaire" avec une interface graphique.
J'ai cependant un gros problème d'architecture je pense.

En fait j'ai donc la classe Banque qui fait tous les traitements et les opérations. Cette Banque contient une liste de Client et ces Client contiennent une liste de CompteBancaire.

Le problème est que je n'arrive pas à savoir où faire les opérations d'un point de vue sécurité.
Mon GUI demande un login/password ou de créer un compte. A la création du compte on créée en fait un Client qui stocke les deux attributs login et le hash du mot de passe de façon sécurisée dans ses attributs.

Par contre la question est que si par exemple la Banque contient déjà plusieurs Client et que l'on se connecte via le GUI avec une paire login/mdp, qui doit faire les opérations bancaires (retrait, crédit) ? Car la Banque ne connait pas le login, elle n'a que la liste des Client donc elle doit toujours parcourir avec une boucle la liste des Client jusqu'a trouver celui qui a le même login et à partir de là c'est une méthode de Client qui vérifie si le password est bon.
Déjà je trouve ça vraiment lourd mais en plus le GUI contient une instance de la Banque donc même si on a une vérification du login/mdp au départ, on peut appeler toutes les méthode de banque et il n'y a pas vraiment de sécurité. J'appelle juste la méthode de Client pour vérifier si le mot de passe est bon mais je pourrais très bien appeler toutes les méthodes sans faire de vérification.

Quelle est la solution ? Demander le mot de passe en attribut de chaque méthode de type bancaire ? Et donc revérifier le hash à chaque opération ?
J'ai besoin de vos avis car j'ai vraiment l'impression de louper quelque chose là.
teribilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2012, 01h32   #2
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 419
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 18 419
Points : 33 166
Points : 33 166
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
Comme toujours, la sécurité sur la partie desktop d'une application, c'est impossible à réaliser sans courir un risque d'altération / traficotage des mots de passes.

La "banque" qui effectue et valide toutes les opération bancaire, doit être sur un serveur déporté et, grosso modo (je sur simplifie),

Tu dois avoir ton utilisateur qui fait un login

il reçois un cookie ou un truc similaire identifiant sa session

Ensuite il faut faire chaque opération en transférant cet identifiant dans l'appel. La banque fera ensuite le lien avec le client et les comptes autorisés.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2012, 12h47   #3
teribilis
Invité de passage
 
Inscription : novembre 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 7
Points : 0
Points : 0
Merci de ta réponse.

En fait le soucis c'est que ce n'est pas la Banque qui fait tous les traitements. La Banque contient une liste de Client et les Client une liste de Compte.
Si je fais effectivement tous les traitements dans Banque ça fait énormément de recherche, de for, à chaque méthode pour retrouver l'user, pour retrouver son compte et enfin faire l'opération appropriée.

Du coup ce que je faisais c'était de demander un login/mdp dans le GUI.
J'envoie ça dans une méthode de la banque qui prend login/mdp. La banque recherche effectivement le login dans sa liste de Client, si elle trouve un client potentiel elle appelle une méthode d'authentification du Client sur celui-ci en donnant le login/mdp. Il vérifie donc lui même l'identité en faisant le hash etc.. Si la méthode du Client répond oui, la Banque renvoie l'instance de ce Client.
A la limite ce que je comptais faire, c'était demander le password à chaque fois pour chaque méthode de Client. Ainsi même si on a obtenu une instance de Client, le GUI doit toujours garder le bon mot de passe pour appeler les méthodes de ce dernier.
(Mon application est en RMI donc c'est bien du Client-Server)
teribilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2012, 13h02   #4
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 419
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 18 419
Points : 33 166
Points : 33 166
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
Je crois que tu ois faire une distinction claire entre ce qui se passe coté client et ce qui se passe coté serveur. Tout ce qui doit être sécurisé doit avoir lieu coté serveur. Après tu peux avoir client, banque et compte coté serveur et, coté client, n'avoir que des proxy qui font appel au serveur.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/12/2012, 15h46   #5
teribilis
Invité de passage
 
Inscription : novembre 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 7
Points : 0
Points : 0
Le problème c'est que je bosse en RMI donc effectivement tout est du côté du serveur mais en fait le GUI obtient une référence de la Banque instanciée par le serveur et je peux donc potentiellement appeler toutes les méthodes depuis le GUI. C'est pour ça que je m'embrouille peut être mais je suis de toute façon obligé d'envoyer une référence de la banque au GUI.
C'est pour ça que si je ne sécurise pas tout, un utilisateur sur son GUI peut accéder à la Banque et la liste de tous les User et Comptes mais je n'arrive pas à concevoir une autre façon de faire... (RMI est imposé c'est un projet)
teribilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2012, 16h33   #6
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 419
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 18 419
Points : 33 166
Points : 33 166
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
Non, tu devrais avoir ce genre de chose:

Code :
1
2
Client                                   Serveur
OperationBancaire   <--- reseau ---> OperationBancaire -> Banque
Et opération bancaire contient un numéro de session ou assimilé, à partir de là il peux travailler avec la banque.

Pareil pour le Client.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2012, 16h59   #7
teribilis
Invité de passage
 
Inscription : novembre 2012
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 7
Points : 0
Points : 0
edit: Bon ma réflexion a évolué effectivement maintenant je n'ai que deux Remote object.
Un singleton Connexion qui a une méthode login(login/password), qui demande a la Banque si les identifiant sont bons. Si tel est le cas, cette méthode renvoie une Session (l'autre Remote Object) au client qui lui permet d'effectuer toutes les méthodes bancaires.

Cela semble mieux ? Je dois par contre toujours envoyer en paramètre du constructeur de Connexion et Session la référence à la Banque car c'est elle qui contient toutes les méthodes. Session applique les méthodes de Banque mais effectivement le login a été fixé lors de sa création. Le constructeur est
Code :
Session(Banque bank, String login)
. Ça ne pose pas de problème de laisser Banque en attribut de ces deux classes?
teribilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h52.


 
 
 
 
Partenaires

Hébergement Web