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 :

Protection des pages


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 40
    Points : 22
    Points
    22
    Par défaut Protection des pages
    Bonjour à tous

    Je suis actuellement en stage de développement dans une entreprise et je rencontre un petit souci.

    Alors ma première mission était de réaliser un menu dont l'affichage était différent suivant le groupe auquel appartient l'utilisateur connecté.

    j'ai fait ceci:

    index :
    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
     
    <?php
        // Inclus le fichier contenant les fonctions personalisées
        include_once 'function.php';
     
        // Fonction de connexion à la base de données
        connexion_DB('XXXX');
     
        // Définit l'Id de la page d'accueil (1 dans cet exemple)
        $id_menu_accueil = 0;
     
        // Récupère l'id de la page courante passée par l'URL
        // Si non défini, on considère que la page est la page d'accueil
        if (isset($_GET['menu'])) {
            $_ENV['menu'] = intval($_GET['menu']);
        } else {
            $_ENV['menu'] = $id_menu_accueil;
        }
     
        // Extrait les informations correspondantes à la page en cours de la DB
        extraction_infos_DB();
    <html>
    [..]
    <body>
    <?php echo affiche_menu(); ?>
    <?php deconnexion_DB(); ?>
    <?php
    // Affiche le menu en cours => id de la page = id de la page en cours.
    echo $_ENV['titre'] . "\n";
     
    ?>
     
    </body>
    </html>
     
    ?>


    et voici ma fonction affiche_menu :

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    function affiche_menu() {
     
                // On choisit le menu en fonction du groupe auquel l'utilisateur appartient
                $groupeTEST = $_SERVER[Groupe];
     
                // on ajoute un ; à la fin :
                $groupeTEST = ' '.$groupeTEST.';';
     
                $sql = "SELECT groupeNom FROM groupe";
     
                $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
                while($row = mysql_fetch_array($req))
                {
                            $result_array[] = $row['groupeNom'];
                }
     
                $resultat_trouve == false;
     
                // Comparaison des noms de groupes "purs"
                foreach($result_array as $groupeNom){
                  if (strpos($groupeTEST, $groupeNom.';')){ // d'où l'intêrét d'avoir rajouter un ';' !
                        $groupemenu = $groupeNom;
                        $resultat_trouve == true;
                   }
                } 
     
                //Comparaison avec les "sous-groupes" (ex : DOSC-XXX (- DOSC-MANAGER qui est considéré comme "pur") appartiennent à DOSC)
                if($resultat_trouve == false)
                {
                    foreach($result_array as $groupeNom){
                        if (strpos($groupeTEST, $groupeNom.'-')!== false){
                            $groupemenu = $groupeNom;
                        }
                    }
                }
     
     
     
            // On récupère le menu
            $sql = "SELECT g.groupeId, m.menuId, s.sousmenuId, g.groupeNom, m.menuTitre, s.sousmenuTitre
                    FROM sousmenu s
                        JOIN droit d
                            ON s.sousmenuId=d.sousmenuId
                                JOIN groupe g
                                    ON g.groupeId=d.groupeId
                                        JOIN menu m
                                            ON m.menuId = s.parent
                    WHERE g.groupeNom IN ('$groupemenu')
                    ORDER BY g.groupeId, m.menuId";
     
            $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());                  
     
            $catPrec = 0;
            // on ouvre la liste conteneur
            echo '<ul id="menu">';
            while ($data = mysql_fetch_array($req)) {
            // Si on entre dans une nouvelle catégorie
            if ($data['menuId'] != $catPrec) {
                // Si cette catégorie n'est pas la première, on ferme les listes
                if ($catPrec != 0) {
                echo "</ul>";
                echo "</li>";
                }
                //Nouvelle catégorie
                echo "<li>";
                echo "<a>";
                echo $data['menuTitre'];
                echo "</a>";
                echo "<ul>";
                $catPrec = $data['menuId'];
            }
            // On affiche la ligne sousmenu :
            echo "<li>";
            echo '<a href="index.php?menu='.$data['sousmenuId'].'">';
            echo $data['sousmenuTitre'];
            echo "</a>";
            echo "</li>";
            }
            echo "</ul>";
            echo "</li>";
            // C'est fini, on ferme la liste conteneur
            echo "</ul>";
    }

    Alors tout ça marche nickel et chaque utilisateur n'a dans son menu que les sous-menu auquel il a accès.

    Mais après test, je me suis rendu compte que si je fais partie du groupe A par exemple que n'a accès qu'aux menus 1, 2 et 3, ben malgré que le menu ne me propose que les menus 1, 2 et 3, si je tape "http://localhost/index.php?menu=4" ben le menu 4 va s'afficher quand meme ...

    Une idée ou un conseil ?

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 350
    Points : 507
    Points
    507
    Par défaut
    A chaque fois que tu arrives sur une page, vérifies que l'utilisateur a bien acces a cette page. Si non renvoies le vers une page d'erreur.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    (désolé d'avance si mes questions peuvent paraître bêtes et naïves mais je débute en php et j'aime bien être sûr à 100% quand j'ai des doutes ^^')

    Déjà en fait j'ai 1 seule page (index.php) dont l'url varie suivant la catégorie sélectionnée dans le menu ("http://localhost/index.php" lorsqu'on se connecte puis "http://localhost/index.php?menu=1" "http://localhost/index.php?menu=2" etc ... suivant le menu.).

    Donc faudrait qu'au début de ma page index.php je fasse une comparaison entre les "?menu=X" et les menus autorisés à l'utilisateur (que je peux mettre sous forme de tableau) ?

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 350
    Points : 507
    Points
    507
    Par défaut
    Oui tu peux faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // si il y a un menu de selectionné
    if (isset($_GET['menu'])){
        // on recupere les menus de l'utilisateur
        $aUserMenu = CLASS::getUserMenu($user);
     
        // si l'utilisateur n'a pas acces au menu selectionné
        if (!in_array($_GET['menu'], $aUserMenu)) {
            // on le renvoie sur une page d'erreur
            PAGE ERROR;
        }
    }

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    ça marche nickel ! j'ai fait ça.

    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
     
    // si il y a un menu de selectionné
        if (isset($_GET['sousmenu'])){
        // on recupere les menus de l'utilisateur  
        $sql = "SELECT s.sousmenuId, g.groupeNom
                    FROM sousmenu s
                        JOIN droit d
                            ON s.sousmenuId=d.sousmenuId
                                JOIN groupe g
                                    ON g.groupeId=d.groupeId
                WHERE g.groupeNom = 'DOSC'";
     
                $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
                while($row = mysql_fetch_array($req))
                {
                            $result_array[] = $row['sousmenuId'];
                }
     
        // si l'utilisateur n'a pas acces au menu selectionné
        if (!in_array($_GET['sousmenu'], $result_array)) {
            // on le renvoie sur une page d'erreur
            header('Location: index.php');
        }
        }

    Merci beaucoup à toi d'avoir pris le temps de m'aider ça fait plaisir

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

Discussions similaires

  1. [Redmine] Protection des pages contre les visiteurs
    Par lesanglier dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 25/11/2010, 12h49
  2. Réponses: 10
    Dernier message: 07/07/2008, 17h50
  3. Protection image dans des pages WEB
    Par Pascal FLEURY dans le forum Langage
    Réponses: 6
    Dernier message: 25/08/2007, 16h12
  4. [Sécurité] Protection des pages
    Par theskel dans le forum Langage
    Réponses: 16
    Dernier message: 19/10/2006, 16h20
  5. Réponses: 2
    Dernier message: 03/10/2002, 17h24

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