IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Application bancaire sécurisée avec login/mdp


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 3
    Points
    3
    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à.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    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.

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    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)

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    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.

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    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)

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Non, tu devrais avoir ce genre de chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Candidat au Club
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Session(Banque bank, String login)
    . Ça ne pose pas de problème de laisser Banque en attribut de ces deux classes?

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/06/2010, 11h33
  2. [MySQL] Comment sécuriser son login/mdp de sa base SQL
    Par laclac dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/05/2010, 11h50
  3. redirection avec login + mdp
    Par redo_log dans le forum C#
    Réponses: 2
    Dernier message: 19/03/2009, 01h04
  4. Réponses: 1
    Dernier message: 10/10/2007, 16h18
  5. [TIP/Astuce] Enregistrer login/mdp avec votre navigateur
    Par Maxoo dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 22/04/2006, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo