Conseil sur panneau d'administration en PHP

Conseil sur panneau d'administration en PHP - PHP - Programmation

Marsh Posté le 01-03-2008 à 16:38:55    

Bonjour,
 
J'aurais besoin d'un conseil, voilà je suis en pleine création de site internet. Sur mon site, les internautes pourrons s'inscrire, il auront donc un espace perso protégé par mdp...
 
En plus de ça, pour gérer le site, j'ai créer un panneau d'administration.
 
Les administrateurs et les membres sont actuellement sur la même table et se connecte via le même formulaire (par défaut ils ont accès aux mêmes infos que les membres), la différence est que il y a un lien caché uniquement pour les administrateur (type phpbb) qui donne accès au panneau d'administration du site. Je souhaiterai, dans un souci de sécurité, procéder à une nouvelle authentification via une page login indépendante exclusivement reservée aux administrateurs...
 
Mon problème est donc... comment mettre en place ça avec les sessions sachant que l'administrateur etant déjà connecté, il a déja une session valide (Comment différencier 2 sessions?) et faut t'il séparé la table admin et la table membres??

Reply

Marsh Posté le 01-03-2008 à 16:38:55   

Reply

Marsh Posté le 03-03-2008 à 12:23:47    

Merci pour ton aide et rebonjour,
 
Voila j'ai donc réussi a créer 2 sessions courantes, que j'ai distingués par le nom (et aussi le nom des variable au passage).
 
J'ai donc 2 script indépendant pour le logger, et une nouvelle fonction que je met au debut de chaque page (additionner a la 1ere) à la quelle j'ai rajouter la vérification des droits :
 
voila le code :
 

Code :
  1. function page_securite_admin() {
  2.         if(isset($_SESSION['admin_logged'])) {
  3.                 if($_SESSION['admin_logged'] == 1) {
  4.                         if(isset($_SESSION['admin_ip_client']) && ($_SESSION['admin_ip_client'] == $_SERVER['REMOTE_ADDR'])) {
  5.                                 if (isset($_SESSION['admin_HTTP_USER_AGENT'])) {
  6.                                     if ($_SESSION['admin_HTTP_USER_AGENT'] == mhash(MHASH_SHA256, $_SERVER['HTTP_USER_AGENT'])) {
  7.                                                 if(isset($_SESSION['admin_user'])) {
  8.                                                         if($_SESSION['user']->droit == 4) {
  9.                                                                 return true;
  10.                                                         }
  11.                                                 }
  12.                                         }
  13.                                 }
  14.                         }
  15.                 }
  16.         }
  17.         return false;
  18. }


 
Je procede comem ça sur chaque page :
 

Code :
  1. session_name('membres');
  2. session_start(); // Création de la première session
  3. session_write_close(); // Fermeture de la première session, ses données sont sauvegardées.
  4. session_name('admin'); // Indication du nom de la seconde session
  5. session_start(); // Ouverture de la seconde session
  6. if(!page_securite()) { // Vérification de la 1ere session
  7.         header("Location:".$racine_relatif."/erreur.php?error=6" );
  8.         die();
  9. }
  10. else if(!page_securite_admin() || $_SESSION['user']->droit != 4) { // Verification de la session admin
  11.         header("Location:".$racine_relatif."/erreur.php?error=6" );
  12.         die();
  13. }
  14. else { // affichage de la page


maitenanent ça fonctionne, (par contre je c'est pas si c'est vraiment la meilleur façon de procéder).
 
par contre, j'ai un problème pour la deconnexion, je souhaiterai faire sauter la session admin, sans faire sauter la 1ere.
 
 
Pour eviter de vider toutes les variables sessions j'ai juste supprimé les principales avec unset. Pour la session
j'ai fait ça : session_destroy('admin');
 
mais ça a pa l'air de marcher.
 
Pourriez vous meclairer s'il vous plais ?

Reply

Marsh Posté le 03-03-2008 à 14:04:19    

Moi, je n'aurais pas fait deux sessions, j'aurais complété celle qui existe déjà.
 
J'y aurais ajouté une donnée "est_administrateur", par défaut à 0, et qui passe à 1 dès que l'identification en tant qu'administrateur a été faite.
 
Ca donnerais, par exemple :
 
Un visiteur arrive sur le site : est_administrateur = 0
Le visiteur est identifié automatiquement (cookie), ou s'identifie lui-même : est_administrateur = 0
Le membre clique sur le lien du panneau d'administration. est_administrateur == 0, on affiche le formulaire de login
Le membre s'identifie en tant qu'administrateur : est_administrateur = 1
 
Et voilà, le tour est joué ! Bien sûr, est_administrateur n'est pas sauvegardé dans le cookie du membre et n'est donc conservé que pour la session courante.
 
Après, il faut peut-être sécurisé un peu plus que ça, mais l'idée de base est là, non ?


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 03-03-2008 à 14:09:24    

Effectivement ça peut être une solution, j'ai voulu distingué 2 sessions alors que je peut en concerver une unique...
Mais ma question la plus important est ce que niveau sécurité ça change quelque chose de distingué les sessions ou au final ça change pas beaucoup?

Reply

Marsh Posté le 03-03-2008 à 14:10:20    

Je ne crois pas que ça change quoi que ce soit, si ce n'est en terme de simplicité de développement.
Mais je ne suis pas non plus un pro des sessions !


Message édité par kao98 le 03-03-2008 à 14:10:37

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 03-03-2008 à 14:49:51    

merci pour ton conseil, j'ai revu tout mon système cété une usine à gaz j'ai fait comme tu ma dit... ça a l'air de rouler,

 

Donc : Pour la deconnexion, je vide simplement ma session_['administrateur'], ce qui permet de rester connecter... tout de meme a la deconnexion.


Message édité par lilougirl8 le 03-03-2008 à 14:50:22
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed