Protection d'un dossier admin

Eléphanteau du PHP | 18 Messages

01 sept. 2007, 03:37

Bonjour a tous,

J'ai une petite question que je n'arrive pas a résoudre, j'espère que vos lumières pourront m'éclairer car je suis dans le flou complet.

J'ai crée une admin dans un dossier ./admin/ un formulaire d'identification sur trouve sur une page index.php. Une fois que le membre entre son login et mot de passe une session php est crée pour accéder aux autres pages avec une interrogation de bdd. J'ai crée une page logout.php qui détruit les variables de session. J'ai également limité le temps en cache de la session a une heure.

Ma question est la suivante. Si je quitte le dossier ./admin/ pour aller sur un site quelconque et que j'utilise le bouton précédent de mon navigateur pour revenir sur le dossier ./admin/ je suis toujours logué. Est t'il possible de faire en sorte que je ne le sois plus lorsque je reviens ??

J'espère avoir été assez clair mais je voudrais pouvoir mettre en place tout ca.

Merci pour vos conseils

ViPHP
ViPHP | 5924 Messages

01 sept. 2007, 03:52

Euh, … non …
Tu ne peux pas contrôler ce genre de choses. Le bouton précédent est géré par le navigateur, tu n'as pas à savoir ce que l'utilisateur en fait. La seule chose que tu pourrais éventuellement faire (attention, très lourd), c'est utiliser un script ajax pour t'assurer régulièrement (toutes les 10 secondes par exemple) que l'utilisateur est toujours sur la page d'admin), ou bien alors utiliser onUnload mais j'ai des doutes sur la viabilité de cette possibilité.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 sept. 2007, 11:38

Ce n'est pas seulement une histoire de bouton précédent.

Lorsque tu créés une session, le serveur lie le processus du poste client associé au navigateur aux données de la session. Tu peux ainsi aller te ballader sur n'importes quels autres sites et rentrer à nouveau l'url ou passer par les favoris pour te retrouver à nouveau sur le site et identifié par la session.
Pire, si tu ouvres une nouvelle fenêtre ou onglet dans le même processus (avec ctrl+n) sans relancer une session de ton explorateur et que tu vas sur le site avec, tu seras également identifié et associé à la session.

Il n'y a amha pas de solution aujourd'hui pour identifier le départ d'un utilisateur et lancer l'opération de déconnexion si celui-ci ne le fait explicitement. A voir éventuellement du côté des sockets s'il n'y a pas un moyen de capter le départ d'un client, mais je n'en suis vraiment pas sur.

La fonction javascript onUnload peut être utilisé pour savoir que la page se "décharge" (mais elle se décharge dès que tu changes de page, même si tu restes connecté au site, genre en ayant suivi un lien). Au mieux, tu peux bricoler ça avec une frame pour ton outil d'admin (puisqu'on se fout du référencement de celui-ci) et ainsi capturer le onUnload de la frame et non de la page, mais ca reste du bricollage et il n'y a pas de garantie. Voir le forum Javascript pour plus d'info.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...