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

Tomcat et TomEE Java Discussion :

[Tomcat5.0.28] Usurpation d'identité


Sujet :

Tomcat et TomEE Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut [Tomcat5.0.28] Usurpation d'identité
    Bonjour à tous !

    Je suis confronté à un problème des plus critique.
    Mon application JSF tourne actuellement en production depuis quelques mois, et durant cette période, au moins 5 utilisateurs se sont retrouvé sur la session de quelqu'un d'autre !

    Je m'explique, ils sont en train de travailler (avec bien evidement une session qui leur est propre, géré par Tomcat) et d'un seul coup, sur un changement de page ou suite à un plantage applicatif, il se retrouve connecté avec le compte de quelqu'un d'autre !

    Niveau sécurité ça le fait pas du tout !

    On a pu remarquer dans les logs, qu'entre un allé retour, client/serveur, un personne pouvait se voir octroyer un nouvel JSessionID (ce qui à mon avis ne devrait pas être possible)

    Je ne sais pas trop par où aborder le problème... bug Tomcat ? Applicatif ? de réseaux ?

    Toutes les pistes sont les bienvenues !

    Merci d'avance !

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 888
    Par défaut
    Salut,

    A priori je dirais qu'il s'agit d'un problème lié à l'environnement.

    As-tu une structure en cluster ?

    Sinon au niveau applicatif, je vois mal comment tu pourrais mal gérer les sessions à moins d'avoir bricoler des choses au niveau des ThreadLocal. Touches-tu d'une manière ou d'une autre aux sessionId ?

    Comment gères-tu l'authentification ?

    A+

  3. #3
    Membre éclairé Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    Merci pour ta réponse,
    Alors :
    Une structure en cluster ? késako ? j'ai fait une recherche massive sur mon projet, et je n'est rien trouvé en rapport avec un cluster... j'aurais donc tendance à dire que non....

    On ne touche jamais à l'id de session...

    L'authentification est géré via J_security_check (via le tomcat-user.xml en dev, et via un annuaire LDAP en prod)

    Niveau applicatif, c'est la que ca se gatte
    On a en effet bricoler des choses au niveau des ThreadLocal
    En gros, on à créé un objet "Context" qui contient toutes les informations relatives à l'utilisateur connecté. Chaque requêtes transmises par l'utilisateur, passe par un filtre qui fait un peu de ménage dans ce context (uniquement sur des infos sans intérêt), puis on replace ce context en tant qu'attribut de session, mais également dans un ThreadLocal.... Visiblement, lorsque l'on a besoin des informations présentes dans ce context, on va chercher celles qui sont stockées dans le threadLocal et non celle qui sont stockées dans la session...

    Je ne suis pas l'auteur de la création du threadLocal, j'aurais donc du mal à justifier sa présence pour l'instant...
    En quoi le ThreadLocal peut poser problème ?

  4. #4
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 888
    Par défaut
    Si tu places des choses en ThreadLocal, il se peut qu'une autre "session" sur le tomcat utilise la même thread, d'où la collision que tu as avec tes users.

    Tomcat utilise une thread par requête, et il est probable que tu changes de thread, même si tu as toujours la même session http.

    Il faudrait que dans ton filtre, tu vérifies que l'utilisateur dans le context en ThreadLocal est le même que celui dans la session, je pense que ton problème vient de là.

    A+

  5. #5
    Membre éclairé Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    En regardant d'un peu plus prêt, je ne suis pas sure que cela soit possible...
    En effet, lorsque j'arrive dans mon filtre,
    1 - Je recupère le context que j'avais placé précédement en session
    2 - Je modifie ce contexte en fonction de mes besoins
    3 - J'enregistre ce nouveau context dans la session (pour remplacer l'ancien context)
    4 - J'enregistre ce fameux context dans mon ThreadLocal
    5 - Je réalise mes traitements (service, dao, bdd...)
    6 - Je vide mon theadLocal pour la prochaine requete

    Mëme si finalement durant mon traitement, quelqu'un d'autre à ecrit dans mon threadLocal, etant donnée que ce dernier est sauvegardé dans ma session, a la requete suivante tout devrait etre rentré dans l'ordre...

    Sauf si finalement il existe un lien entre l'objet (mon context) présent dans le threadLocal et celui que je viens de mettre en session... (à vérifier)

    Dans tous les cas, on a pu observer des choses bizarre avec le JSESSIONID...
    Nulle part dans l'application je ne demande la création de cookie, pourtant, mon appli génère un cookie contenant un JSESSIONID
    Ce dernier peut avoir un comportement bizarre...

    http://www.developpez.net/forums/d62...s-transaction/


    Est-ce que ca pourrait être lié à mon problème ?

  6. #6
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 888
    Par défaut
    Est-ce que ton application tourne en parallèle sur plusieurs tomcats différents ? Il se peut que tu aies un problème de partage de session...

    Sinon, en lisant ce que tu écris, ça parait difficile en effet d'avoir un problème lié à la ThreadLocal car on dirait que tu ne l'initialises qu'avec des données provenant de la session, et jamais l'inverse.

    Hmm... J'ai regardé aussi le lien que tu as posté : changement de session entre deux requêtes, est-ce que tu as mit un session-timeout très bas ?

    A+

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