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 PHP Discussion :

[Sécurité] interdire l'ouverture de 2 sessions simultanée d'un compte


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Points : 73
    Points
    73
    Par défaut [Sécurité] interdire l'ouverture de 2 sessions simultanée d'un compte
    Bonjour à toute l'équipe,

    j'ai un petit problème, je souhaite interdire l'ouverture simultanée de deux sessions du même compte. j'ai prévu alors une table Tsession là où je stockerai l'ID de l'utilisateur et la date/heure connexion et puis après la date/ heure de déconnexion.

    le problème qui se pose maintenant c'est : si l'utilisateur ferme son browser sans avoir être déconnecté je n'ai pas moyen d'écrire dans la base de données l'heure de déconnexion donc bug à la prochaine connexion du même utilisateur qui sera considéré comme toujours connecté !!

    quelqu'un aurait une solution à me proposer ? moi j'ai pensé à désactiver/cacher le bouton "fermeture" du navigateur, ce qui semble impossible sauf si on me prouve le contraire.

    Merci d'avance a tout le monde.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Quel est l'intéret fonctionnel d'empecher l'ouverture de deux connexions pour un meme compte ?

    Sinon je confirme, tu ne peux pas cacher le bouton fermeture du navigateur... encore heureux ! Et quand bien meme c'était possible tu peux pas empecher la panne de courant

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    salut Mr N,

    Merci pour ta réactivité et pour ton aide. sinon j'aimerai empêcher la connexion simultanée du même compte pour des raisons de sécurité.

    t'as raison ça m'aurais étonné si Microsoft nous aurait permi ceci . Sinon y aurait-il un moyen de détecter cet évenement ( fermeture du browser) , mieux encore , de détécter la destruction de la session comme ce que l'on trouve en .Net ( la procédure session_end() ) ??

    merci encore une fois.

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    je ne comprends pas
    il n'y a pas deux sessions

    si ton utilisateur ferme son navigateur et le réouvre la session est perdue. il en ouvre donc une autre.

    s'il ferme sa fenêtre mais pas son navigateur et qu'il la réouvre il est toujours dans la même session.

    si ton problème est de savoir si ton utilisateur doit s'authentifier c'est simple s'il a une session il est déjà connu et ne doit pas s'authentifier. tu peux ajouter la condition la session existe et ne contient pas de déconnexion.

    mais jamais il peut y avoir deux sessions

    A+JYT

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par loukili81
    Merci pour ta réactivité et pour ton aide. sinon j'aimerai empêcher la connexion simultanée du même compte pour des raisons de sécurité.
    Mais encore ? Je ne vois pas le problème...

  6. #6
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Tu peux éventuellement mettre un timeout sur ta table : si la session est ouverte depuis plus de 5 minutes sans action, tu vides la table.

    Sinon tu parcours l'ensemble des sessions lors de la connexion, et tu vérifies que l'utilisateur n'est pas déjà présent (en adaptant la durée des sessions à ton besoin).

    Ou encore, 3ème solution, en cas de coupure de courant ou autre, l'utilisateur peut demander un reset de toutes les sessions qui lui sont reliées. Mais ça permettrait à un 2è utilisateur avec les identifiants de remplacer manu militari le premier.

    Citation Envoyé par loukili81
    Bonjour à toute l'équipe,

    j'ai un petit problème, je souhaite interdire l'ouverture simultanée de deux sessions du même compte. j'ai prévu alors une table Tsession là où je stockerai l'ID de l'utilisateur et la date/heure connexion et puis après la date/ heure de déconnexion.

    le problème qui se pose maintenant c'est : si l'utilisateur ferme son browser sans avoir être déconnecté je n'ai pas moyen d'écrire dans la base de données l'heure de déconnexion donc bug à la prochaine connexion du même utilisateur qui sera considéré comme toujours connecté !!

    quelqu'un aurait une solution à me proposer ? moi j'ai pensé à désactiver/cacher le bouton "fermeture" du navigateur, ce qui semble impossible sauf si on me prouve le contraire.

    Merci d'avance a tout le monde.

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    je réexplique mon problème à ceux qui le voient pas encore ( guidav lui je pense qu'il a compris ). en effet, le problème n'est pas un problème de session qui n'est pas détruite à la fermeture de ma fenêtre.

    quand un user s'authentifie, j'écris dans ma table ( Tconnexion par exemple) la date et heure de connection. si le même user veut se connecter simultanément depuis un autre poste avec son compte, je devrai refuser l'ouverture de la 2ème session car une session est ouverte et non encore fermée( date et heure fermeture connexion non encore renseignée dans ma BDD).

    imaginons maintenant que mon user ne se déconnecte pas et qu'il se contente de fermer sa fenêtre. mes variables de sessions seront détruites , je le sais, mais à sa prochaine connexion il sera interdit d'accès puisque considéré comme connecté ( vu que dans ma BDD j'aurais pas écrit les infos concernant sa déconnexion).

    j'espère que c'est plus claire là.

    sinon pour ta réponse guidav

    Tu peux éventuellement mettre un timeout sur ta table : si la session est ouverte depuis plus de 5 minutes sans action, tu vides la table.
    quand tu dis sans action ça veut bien dire que l'utilisateur reste inactif ? si c'est le cas, est ce que ceci restera valable quand le user ferme sa fenêtre ? bon je vais devoir tester peu être...

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Quel est le problème de sécurité soulevé par le fait d'avoir deux connexions différentes sur un même compte ?

  9. #9
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Je ne vois pas vraiment le probleme non plus.

    Tu peux stocker le session id dans la table user pour chaque utilisateur lors de la connexion et verifier a chaque page que le session_id en cours correspond a celui dans la table, si c faux tu deconnecte l'utilisateur.
    http://hk2.php.net/manual/en/function.session-id.php

  10. #10
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    je ne vois pas non plus car il ne peut pas y avoir deux connexion dans ce cas

    soit le client à fermé son navigateur et la session est close

    soit il ne l'a pas fermé et il est toujours connecté à sa session

    je ne vois vraiment pas ce qu'il y a d'anormal à ça.

    la connexion étant fermé à chaque page il est normal que lorsque le client reviens sans avoir fermé son navigateur il retrouve sa session

    à la rigueur mettre un délai qui dit que la session expire au bout d'un certain temps d'inactivité. mais à part emmerder le client ça n'ajoute pas de sécurité.

    pour moi si la session est ouverte et que le client arrive sur la page de login
    deux solution soit tu ferme la session en cour et tu lui présente le formulaire de login
    soit tu lui envois un message comme quoi il est déjà connecté.
    et c'est tout

    pour l'accès à toutes les autres page à partir du moment où le gars à une sessions c'est juste une question de permissions à gérer

    A+JYT

  11. #11
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    je ne vois pas non plus car il ne peut pas y avoir deux connexion dans ce cas :
    - soit le client à fermé son navigateur et la session est close
    - soit il ne l'a pas fermé et il est toujours connecté à sa session
    je ne vois vraiment pas ce qu'il y a d'anormal à ça.
    je suis tout à fait d'accord que ceci n'a rien d'anormal et c'est pas ça mon problème. je réexplique :

    Etape1 :
    - mon user A arrive. il saisit son login et password
    - login et password corrects + aucune connexion en cours pour ce user (lecture depuis ma table TConnexion)
    - Ouverture session X. je stocke dans ma table TConnexion : idUser (A) + datetime ouverture session.

    Etape2
    - mon user A se déconnecte, je détruit sa session et stocke dans ma table TConnexion la dateTime fermeture connexion.

    c'est bon jusque là ?

    Etape 2'
    imaginons maintenant que user A ne se déconnecte pas mais se contente de fermer sa fenêtre (destruction automatiques des données session).

    Etape 3
    le lendemain quand user A arrive. il tape son login et password, je verifie si aucune connexion n'est ouverte et à l'état en cours pour ce user -> une connexion est en cours ( la dernière fois ,Etape 2', j'ai pas eu le temps de'écrire le datetime fin de connexion), je désactive l'accès !!

    Vous voyez mon problème maintenant ?? il le faut en tout cas car je ne peux expliquer d'avantage

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    En fait c'est pas que l'on ne comprend pas ton probleme mais on ne saisi pas vraiment l'utilité d'une tel procedure. A quoi peut bien te servir d'interdire 2 sessions simultanée pour un meme utilisateur?

    A la limite, a ton etape 3 si a la reconenction, il ne correspond aucune fin de session a ton debut de session inscrit dans ta DB, ferme la premiere session, vide la session antérieur de ton utilisateur si t'a encore d'autre chose stocké en dur dans ta DB, et creer en lui une tout neuve

  13. #13
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par loukili81

    je suis tout à fait d'accord que ceci n'a rien d'anormal et c'est pas ça mon problème. je réexplique :

    Etape1 :
    - mon user A arrive. il saisit son login et password
    - login et password corrects + aucune connexion en cours pour ce user (lecture depuis ma table TConnexion)
    - Ouverture session X. je stocke dans ma table TConnexion : idUser (A) + datetime ouverture session.

    Etape2
    - mon user A se déconnecte, je détruit sa session et stocke dans ma table TConnexion la dateTime fermeture connexion.

    c'est bon jusque là ?

    Etape 2'
    imaginons maintenant que user A ne se déconnecte pas mais se contente de fermer sa fenêtre (destruction automatiques des données session).

    Etape 3
    le lendemain quand user A arrive. il tape son login et password, je verifie si aucune connexion n'est ouverte et à l'état en cours pour ce user -> une connexion est en cours ( la dernière fois ,Etape 2', j'ai pas eu le temps de'écrire le datetime fin de connexion), je désactive l'accès !!

    Vous voyez mon problème maintenant ?? il le faut en tout cas car je ne peux expliquer d'avantage
    ben c'est simple tu regarde sa session ($_SESSION) et s'il est connecté tu n'ovre rien à l'étape 4 car il n'a pas fermé sa session il est donc toujours connecté et tu l'avertit

    soit il c'est effectivement barré et il n'y a rien dans sa session ($_SESSION) au quel cas tu ferme la vielle et tu en ouvre une autre

    si tu veux darder la trace de l'heure de fermeture à chaque transaction tu mets l'heure dans son enregistrement TConnexion

    ainsi tu as toujours l'heure de la dernière action faite. donc lorsque tu ferme après coup la fiche TConnexion resté ouverte tu as l'heure à laquelle il c'est barré.

    A+jyt

  14. #14
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Merci à tout le monde d'avoir pensé à mon sujet. mais ça ne répond toujours pas à mon besoin.
    ben c'est simple tu regarde sa session ($_SESSION) et s'il est connecté tu n'ovre rien à l'étape 4 car il n'a pas fermé sa session il est donc toujours connecté et tu l'avertit

    soit il c'est effectivement barré et il n'y a rien dans sa session ($_SESSION) au quel cas tu ferme la vielle et tu en ouvre une autre
    si je déconnecte et que je reconnecte , je risque de déconnecté la bonne personne et de donner accès à une personne non autorisée...

    bon courage à tous.

  15. #15
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Tu ne nous as toujours pas expliqué en quoi le fait d'avoir deux sessions d'ouvertes en même temps pose un problème de sécurité.

    Personnelement je pense que c'est un faux besoin et donc tu perds ton temps et ton argent sur un problème qui n'en est pas un.
    Exemple perso: au boulot je consulte mes mails persos sur un webmail. Je ne ferme ni ma fenetre, ni mon pc. Je rentre le soir, je consulte mon webmail. Je reviens au boulot le lendemain, je consulte mon webmail, sans avoir rien à faire à part peut-etre [refresh] sur le browser... A un moment donné, il y a eu 2 sessions d'ouvertes pour un meme utilisateur. Où était le problème ?

  16. #16
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Exemple tout bete :

    Tu offres la possibilité a un utilisateur de regarder des vidéos avec un abonnement a usage unique. Tu veux interdire à l'utilisateur de passer son login/mdp a ses amis pour qu'ils regardent des vidéos en meme temps sur le meme compte.

    Je suppose que c'est ce genre de situation que loukili81 rencontre : Comment savoir si quand qqn se connecte sur le site (et donc n'a pas de session d'ouverte, navigateur tout frais etc) c'est la bonne personne (et donc qu'il a simplement oublié de fermer son navigateur avant) ou un de ses copains qui profitent du login/mdp?

    Et j'aurai tendance a dire que tu peux stocker dans ta base un identifiant de la session ainsi que la date a laquelle tu l'as ouverte cette dite session. Quand quelqu'un essaie de se connecter au site, qu'une session a déjà été ouverte avant (mais ca n'est pas la meme) tu regardes la date a laquelle cette session a été ouverte, si ca fait 5 heures tu te dis que ca n'est pas genant, si ca fait 30 secondes tu te dis que ca n'est pas la meme personne et que ca n'est donc pas normal.
    De la meme maniere tu peux aussi dire "d'accord cette session devient la bonne", et interdire la connexion de l'autre session (en verifiant non pas que la session existe dans tes pages, mais que c'est la "bonne session").

    J'espère avoir été compréhensible!

  17. #17
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    alors je pense que tu devrais fermé ton bureau si tu souhaite que personne ne puisse lire tes message perso Mr N

    bon koopajah a compris mon problème.pourquoi cette situation posera t-elle un problème de sécurité ? en effet, disons qu'on m'a demandé de faire ainsi et que j'ai pensé que ça doit être lié à une raison de sécurité.

    en tout cas, je pense qu'il y a pas de solution mais plutôt une logique à suivre et à adopter.

    je vous remercie tous pour votre collaboration. bien à vous.

  18. #18
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Tu peux aussi faire en sorte que lors d'un accès concurrent, le 2è à se connecter ait un message du type "voulez-vous déconnecter l'utilisateur 1" et que l'utilisateur 1 reçoive le cas échéant "vous avez été déconnecté sur demande de l'utilisateur 2". Sinon, il y a toujours la possibilité d'utiliser un identifiant physique (carte securID, dongle USB) ou un certificat, mais les coûts ne sont évidemment pas les mêmes. Ca dépend aussi de l'ampleur de la diffusion envisagée. Si c'est pour ds films, c'est pas raisonnable, si c'est pour accéder à un fichier top secret de l'armée, c'est nécessaire

  19. #19
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    oui guidav c'est pas mal comme idée, j'avais pensé à quelque chose pareil Merci bcp et bonne journée.

  20. #20
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par loukili81
    alors je pense que tu devrais fermé ton bureau si tu souhaite que personne ne puisse lire tes message perso Mr N
    Le fait que je verrouille mon bureau 1) empeche tout accès à celui-ci par des personnes non autorisé 2) ne ferme pas mes sessions


    "on m'a demandé de faire ainsi " n'est pas un argument pour moi

    guidav a proposé une bonne solution pour le problème de koopajah

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/07/2018, 11h01
  2. [Sécurité] taux d'ouverture des emails d'une news
    Par renaud26 dans le forum Langage
    Réponses: 14
    Dernier message: 09/11/2006, 00h44
  3. Limiter les tentatives d'ouverture d'une session linux
    Par steven51 dans le forum Administration système
    Réponses: 3
    Dernier message: 25/04/2006, 08h50
  4. Réponses: 4
    Dernier message: 16/03/2006, 21h22
  5. [Win XP] Pb d'affichage à l'ouverture d'une session
    Par duboisfa dans le forum Windows XP
    Réponses: 3
    Dernier message: 16/03/2006, 17h50

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