+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité de passage
    Inscrit en
    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à.

  2. #2
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

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

    Informations forums :
    Inscription : avril 2007
    Messages : 21 895
    Points : 41 488
    Points
    41 488

    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.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et

  3. #3
    Invité de passage
    Inscrit en
    novembre 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : novembre 2012
    Messages : 7
    Points : 0
    Points
    0

    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 Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

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

    Informations forums :
    Inscription : avril 2007
    Messages : 21 895
    Points : 41 488
    Points
    41 488

    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.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et

  5. #5
    Invité de passage
    Inscrit en
    novembre 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : novembre 2012
    Messages : 7
    Points : 0
    Points
    0

    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 Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

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

    Informations forums :
    Inscription : avril 2007
    Messages : 21 895
    Points : 41 488
    Points
    41 488

    Par défaut

    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.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et

  7. #7
    Invité de passage
    Inscrit en
    novembre 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : novembre 2012
    Messages : 7
    Points : 0
    Points
    0

    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 :
    Session(Banque bank, String login)
    . Ça ne pose pas de problème de laisser Banque en attribut de ces deux classes?

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •