[php] Droit

Résolu
Bonjour,
J'ai une partie administration d'un site, ou des pages doivent être visible uniquement pour les administrateur connectés.
J'essaie donc de faire en sorte qu'une personne mal intentionnés ne puissent pas accéder a ces pages en tapant directement l'adresse de la page dans son navigateur.
Mon problème se pose ici que je ne sais pas trop comment faire pour empêcher cela.

Faut il que je crée une un table ou mon administrateur aura des droits spécifiques pour certaines pages ?
Regarder si l'administrateur connectés existe bien dans la base suffit il ? (ce que j'ai fait)

Code :
<?php
$req="SELECT count(login) FROM admin WHERE login ='".$_SESSION['Admin']."'";
$exe=mysql_query($req);
$result = mysql_fetch_array($exe);
if($result[0] != 1)
{
//rediriger
}
?>

Les variables de session utilisés ainsi sont elles le bon choix ?

Bref je ne sais pas trop comment m'y prendre, si l'on pouvait m'aider svp.

De plus s'il se trouve que l'internaute n'a pas le droit d'accéder a cette page, je veux le rediriger ailleurs, seulement j'ai un peu (même beaucoup) de mal a comprendre le fonctionnement de la fonction "header" en php, car j'ai lus que l'on faisait comme ça et qu'il fallait faire attention a des entêtes déjà donné... bref j'ai beau lire et relire je comprends pas.
Si l'on pouvait m'éclairer d ce coté si également svp.
Configuration: Windows XP
Firefox 3.5.1

25 réponses

Résumé de la discussion

Protéger des pages d'administration afin qu'elles restent accessibles uniquement aux administrateurs connectés est le cœur du problème, plusieurs utilisateurs cherchant une solution fiable pour empêcher l'accès direct via l'URL. Réponses suggèrent d'utiliser les variables de session (par exemple $_SESSION['niveau'] ou $_SESSION['Admin']), de vérifier l'autorisation au chargement et de rediriger via header, tout en évitant les en-têtes déjà envoyés. D'autres préconisent l'authentification côté serveur avec htaccess ou l'usage des variables serveur pour rejeter les requêtes dont l'origine n'est pas celle du site. Plusieurs échanges soulignent l'importance d'une approche combinée et recommandent de tester l'accès administratif au début des pages, d'utiliser une redirection côté serveur plutôt que JavaScript, et d'en analyser les cas d'échec.

Bobot (l’IA à votre service)
  1. faute de frappe ... zarbi je l'avait pas vu lol!!
    1. Contributeur
      c'est vrai qu a y regarder de plus pres.. je trouve pas son "\".. mais bon, le principal c'est qu'il ai trouvé ;)
  2. Je suis en anonyme ya pas la case !
    1. Contributeur
      ah oui.. :s... j'vais faire la remarque à un admin.. si ils peuvent pas rajouter un ptit lien dans le mail d'envoie ;)
  3. Contributeur
    ah .. une ptite faute de frappe, ca change tout !!
    :p

    met ton post en résolu ;)
    1. C'est bon j'ai trouvé !!
      y'avait un probleme de "\" devant des guillemets dans la condition

      Merci bcp pour votre aide !
      1. mmhhh!! j'aurais pas fait comme ça j'imagine que le code est plus long que ça....
        mais pour faire avec ce que tu a fait je n'utiliserais pas ma fonction php qui me semblke t'il ne sers pas a grand chose

        <?php
        session_start();
        
        //je remplace ta fonction par une chaine
        $string='<html>
        <head>
        <title></title>
        </head>
        <body>';
        
        if($_SESSION['visit']!=$tab[0] && $_SESSION["niveau"] != 1)
        {
        echo $string...la suite de ta page quand on a pas le droit d'acceder
        }
        else
        {
        // j inclus la page à afficher dans $Html et puis...
        echo $string...la suite de ta page autorisée
        }
        
        ?>
        
        1. Contributeur
          perso..mon site est construit comme cela , si ca peut te donner une piste :

          index.php :

          <?php

          require_once ("Main.php");
          AfficherTableEntiere();
          ?>

          Main.php :

          <?php

          function AfficherTableEntiere(){
          $Html="
          <html>
          <head>
          <title></title>
          </head>
          <body>";

          $Html.="</body>
          </html>";

          if($_SESSION['visit']!=$tab[0] && $_SESSION["niveau"] != 1)
          {
          header("location: index.php");
          exit();

          }else{
          // j inclus la page à afficher dans $Html et puis...
          echo $Html;
          }

          ?>
          }
          1. oupss, desolé,ca t'affiche quoi exactement ? la meme page ou un msg d'erreur ?
            1. J'ai vu que tu avais oublier "<" au debut donc mea culpa, mais sinon ça ne marche pas , je ne suis pas rediriger : /
              1. Ben ça m'affiche

                'script type="text/javascript">
                window.location.replace(\'index.php\');
                </script>'

                au lieu de me rediriger, et affiche la page complète alors que c'est sensé me rediriger
                1. alors essaye te fire une redirection en javascript pour voir si ca marche

                  if($_SESSION['visit']!=$tab[0] && $_SESSION["niveau"] != 1)
                  {
                  echo'script type="text/javascript">
                  window.location.replace(\'index.php\');
                  </script>';
                  } 
                  
                  1. La page qui contient ce code est elle meme inclue dans index.php, donc oui il y a des includes avant.
                    Mais non dans index.php il n'ya pas de "echo".

                    il est possible que certaine page que j'inclue ont leur script qui comence de cette maniere :
                    Code:

                    <html>
                    <head>
                    <title></title>
                    </head>
                    <body>
                    </body>
                    </html>
                    1. Contributeur
                      <html>
                      <head>
                      <title></title>
                      </head>
                      <body>
                      </body>
                      </html>

                      si tu as ce code avant donc le header est déjà déclarer !!! et c'est pour cela que header("location: index.php"); ne fonctionne pas !!
                  2. Non ya pas de "echo"
                    Code :
                    <?php
                    //connexion au serveur
                    $cnx = mysql_connect("***", "***","**") ;
                    //sélection de la base de données
                    $db = mysql_select_db("***") ;
                    $verif="select login from admin where login='".$_SESSION['visit']."'";
                    $req=mysql_query($verif);
                    $tab=mysql_fetch_array($req);
                    if($_SESSION['visit']!=$tab[0] && $_SESSION["niveau"] != 1)
                    {
                    header("location: index.php");
                    }
                    ?>

                    Cependant, j'ai un index.php, avec d'autres pages qui sont inclues via la method GET. Je sais pas si cette info peut servir.
                    1. Et sinon, pour le deuxieme probleme concernant les header, j'ai cette erreur
                      "Warning: Cannot modify header information - headers already sent by (...)"

                      J'ai lus plein de choses sur ça mais j'ai rien compris, concretement je dois faire quoi ?
                      1. Ben oui dansta table user tu a probablememnt defini des niveaux d'acces (admin, super admin,etc...)

                        hé bien dans ton script php tu met par defaut visiteur par exemple, sans aucun droit, dans une boucle switch
                        1. J'ai pensé a une chose, pour l'utilisateur qui viens sur le site, mais qui ne se connecte pas, faut il creer un utilisateur banal, auquel on lui attribue des droits jusqu'a ce qu'il se log ?
                          1. le htaccess est une bonne solution, les variables de sessions le sont egalement, et tu peut aussi utiliser les variables serveur pou securiser une page, ainsi si quelqu'un tape directement l'adresse d'une page protegée si l'origine n'est pas une page de ton site il est rejetté.

                            Bref ces 3 options sont complémentaires

                            voici un lien sur les variables serveur http://www.manuelphp.com/php/reserved.variables.server.php
                            1. Par les deux tu vx dire l'histoire des niveaux, et ma façon de faire ?
                              1. Contributeur
                                par les 2 je veux dire tester en 1er si l utilisateur connecter est admin, et mettre en place le htaccess ;)
                            2. Contributeur
                              le mieux c'est de faire les 2... $_Session[] pour les personnes qui se connectent à ton site via http et le htaccess pour ceux qui essai un peu plus en profondeur ;)
                              • 1
                              • 2