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 :

[Tableaux] Espace membre - Problème de permissions


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 48
    Par défaut [Tableaux] Espace membre - Problème de permissions
    Salut salut!

    J'ai un petit problème. J'ai un espace membre et les login proviennent d'un forum PHP. Et seuls les membres d'un usergroup spécifique ont accès à l'espace membre.

    Le problème, c'est que n'importe quel user ont accès a l'espace membre

    Quelqu'un a une idée?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    case 'auth':
     
      $user = $_POST['user']; 
     
    	$pass = $_POST['pass']; 
     
    	$db = mysql_connect($host, $login, $password);  // 1 
     
    	$basef = "forum";
     
    	mysql_select_db($basef, $db);                    // 2 
     
    	$req = mysql_query("SELECT * FROM phpbb_users WHERE username='".$user."'"	);          // 3 
    	$data = mysql_fetch_assoc($req);
    	$req2 = mysql_query("SELECT user_id FROM phpbb_user_group WHERE group_id='".$groupid."'") or exit(mysql_error()); 
     
    	$data2 = mysql_fetch_assoc($req2);
     
    	$encryptpass = md5($pass);
     
    	if ($data['user_password'] != $encryptpass) {
     
    		echo "Mauvais login ou password";
     
    		redirect("album.php?mode=showform");
     
    	}
     
    	elseif ($encryptpass == $data['user_password']) {
     
    		if ($data['user_id'] = $data2['user_id']) {
     
    			echo "Vous êtes correctement identifié.";
     
    			$loginOK = true;
     
    			$_SESSION['loginOK'] = $loginOK;
     
    			$_SESSION['user'] = $user;
     
    			if ($data['user_level'] == 1) {
     
    			 $_SESSION['admin'] = $data['user_level'];
     
    		  }
     
    			redirect("album.php");
     
    		}
     
    		else {
     
    			echo "Vous n'êtes pas autorisé a accéder aux privilèges des membres.";
     
    		  redirect("album.php");
     
    	  }
     
    	}
     
    	break;
    Que faire?

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par défaut
    pour un début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($data['user_id'] == $data2['user_id'])
    ensuite, il me semble qu'il existe un moyen assez simple que loggué un membre sur un site à partir des bases de phpBB
    ça permet d'avoir un tableau complet sur les propriétés du user en bcp moins de ligne.
    Reste à verifier si son groupe d'appartenance est contenu directement dedans.
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  3. #3
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 48
    Par défaut
    Merci, J'vais essayer ca.

    Pour ta suggestion : le problème est justement, le groupe d'appartenance n'est pas dans la table USERS parce que un utilisateur peut être dans plusieurs groupes. La table user_groups est donc mis comme suis

    USER_ID --- GROUP_ID

    1 --- 5
    1 --- 6
    3 --- 6
    5 --- 5
    5 --- 6

    Par exemple...

  4. #4
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 48
    Par défaut
    Le == a tout arrangé.

    Merci

  5. #5
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    muarf... .. .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    case 'auth':
    
            $user = $_POST['user']; 
    	$pass = $_POST['pass']; // -1- on test que la variable existe et on échappe toujours les caractères spéciaux et on supprime les tags html et php
    	$db = mysql_connect($host, $login, $password); 
    	$basef = "forum";// -2- pas besoin d'initialiser une variable qui ne servira qu'une fois la ligne d'après
    	mysql_select_db($basef, $db);                 
    	$req = mysql_query("SELECT * FROM phpbb_users WHERE username='".$user."'"	);          // -3- on selectionne que ce dont on a besoin et pour le $user voir -1-
    	$data = mysql_fetch_assoc($req); // -4- on teste si Mysql à renvoyé quelque chose avant 
    	$req2 = mysql_query("SELECT user_id FROM phpbb_user_group WHERE group_id='".$groupid."'") or exit(mysql_error()); 
    
    	$data2 = mysql_fetch_assoc($req2);
     // voir -4- tu ne sais même pas si le membre existe que tu cherche déja son groupid
    	$encryptpass = md5($pass);
    
    	if ($data['user_password'] != $encryptpass) {
    
    		echo "Mauvais login ou password";
    
    		redirect("album.php?mode=showform");
    
    	}
    
    	elseif ($encryptpass == $data['user_password'])  //Quel utilité de faire deux fois le test du pass
            {
    
    		if ($data['user_id'] = $data2['user_id']) {
    
    			echo "Vous êtes correctement identifié.";
    
    			$loginOK = true;
    			$_SESSION['loginOK'] = $loginOK;// voir -2-
    
    			$_SESSION['user'] = $user;
    
    			if ($data['user_level'] == 1) {
    
    			 $_SESSION['admin'] = $data['user_level'];
    
    		  }
    
    			redirect("album.php");
    
    		}
    
    		else {
    
    			echo "Vous n'êtes pas autorisé a accéder aux privilèges des membres.";
    
    		  redirect("album.php");
    
    	  }
    
    	}
    
    	break;
    Ce qui donne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    case 'auth':
          // on teste nos variables et au besoin les initialise à vide
          $user = (isset($_POST['user'])) ? $_POST['user'] : ''; 
          $pass = (isset($_POST['pass'])) ? $_POST['pass'] : '';
          
          // on vérifi qu'elles ne sont pas vide
          if(empty($user) || empty($pass))
          {
                echo 'Veuillez saisir votre login et votre pass';
                redirect("album.php?mode=showform");
          }
          else
          {
                $db = mysql_connect($host, $login, $password); 
                mysql_select_db('forum', $db);   
                
                // On echappe les caractères comme les quotes après avoir viré les antislashes si magic quote est activé
                $user = (get_magic_quotes_gpc()) ? mysql_real_escape_string(stripslashes($user)) : mysql_real_escape_string($user);
                // on fait notre requète
                $req = mysql_query('SELECT user_password,user_id,user_level FROM phpbb_users WHERE username=\''.$user.'\''); 
                
                // on vérifi que mysql a bien trouvée quelque chose
                if(mysql_num_rows($req) != 1)
                {
                      echo 'Mauvais login';
                      redirect("album.php?mode=showform");
                }
                else
                {
                      // on assigne le résultat de la première requète et on fait la seconde requete 
                       // (je suppose que groupid est un int définit plus haut dans la page sinon faudra modifier la requete)
                      $data = mysql_fetch_assoc($req);
                      $req2 = mysql_query('SELECT user_id FROM phpbb_user_group WHERE group_id='.$groupid); 
                      $data2 = mysql_fetch_assoc($req2);
                      
                      // on vérifi le pass
                      if ($data['user_password'] == md5($pass)) 
                      {
                            if ($data['user_id'] == $data2['user_id']) 
                            {
                                  echo 'Vous êtes correctement identifié.';
                                  $_SESSION['loginOK'] = true;
                                  $_SESSION['user'] = $user;
                                  // pourquoi ne pas faire directement
                                  // $_SESSION['user_level'] = $data['user_level']; 
                                  if ($data['user_level'] == 1)
                                        $_SESSION['admin'] = $data['user_level'];
                                  
                                  redirect("album.php");
                            }
                            else 
                            {
                                  echo 'Vous n\'êtes pas autorisé a accéder aux privilèges des membres.';
                                  redirect("album.php");
                            }
                      }
                      else
                      {
                            echo 'Mauvais password';
                            redirect("album.php?mode=showform");
                      }
                }
          }
    break;
    
    @ tchaOo°

  6. #6
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 48
    Par défaut
    Mec.. c'est résolu.

    Et pis ton muarf... a la monsieur je sais tout me plait pas du tout.

    Et en passant, le commentaire -2-, c'est parce que j'utilise deux bases. Une qui est utilisé le plus souvent (album) et elle qui est utilisé que dans le auth.

    Merci quand même.

  7. #7
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    Citation Envoyé par yongblood
    Mec.. c'est résolu.
    Alors déja pour le mec on a pas gardé les cochons ensemble... ensuite [résolu] ne veut pas dire [plus le drois de poster] il me semble... .. .

    Citation Envoyé par yongblood
    Et pis ton muarf... a la monsieur je sais tout me plait pas du tout.
    C'est aussi avec des muarf et les critiques/conseils qui vont avec que l'on apprend... et ce muarf, puisqu'il à l'air de t'avoir offusqué n'était en rien un signe de suppériorité ou de rabaissement... .. .

    Citation Envoyé par yongblood
    Et en passant, le commentaire -2-, c'est parce que j'utilise deux bases. Une qui est utilisé le plus souvent (album) et elle qui est utilisé que dans le auth.
    Ca change rien au fait que ta variable ne sert à rien... et plutot que d'utiliser deux bases distinct pourquoi ne pas faire deux tables dans une même base... ça prendra moins de place et ça sera moins lourd en terme de performances... .. .

    Citation Envoyé par yongblood
    Merci quand même.
    De rien quand même... .. .

    @ tchaOo°

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Espace Membres Problème dans l'identification
    Par SickPerson dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 17/04/2013, 00h58
  2. [MySQL] Problème Connexion Espace Membres
    Par Luisito31 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/02/2009, 14h21
  3. Réponses: 9
    Dernier message: 11/01/2009, 21h25
  4. [MySQL] problème d'identification sur un espace membre
    Par dogiro dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 06/09/2008, 17h41
  5. [Tableaux] problème avec espace membre
    Par ph_anrys dans le forum Langage
    Réponses: 10
    Dernier message: 01/03/2006, 17h26

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