[php] Droit

Résolu
Aroeris -  
jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  • 1
  • 2
  1. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    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
  2. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    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
  3. Aroeris
     
    Personne n'a une idée vraiment ? : /
    0
  4. beat
     
    C'est un debut mais je ne suis pas sur que cela suffise car admettons que je vienne sur ta page, je ne suis pas administrateur donc je serais redirigé vers la page de base que tu as mis. Par contre par exemple je suis curieux j'affiche le code source, je vois des liens auxquels je n'ai pas accès alors je les entre dans mon navigateur et si y a pas de vérification dans chaque page réservées aux admin j'y aurais accès.

    Pour ma part je fais en haut des page "reservée":
    //admettons que les admin ait pour niveau 1 et le reste 0, je récuperer de ma bdd le niveau de la //personne que je stock que la session niveau.
    if ($_SESSION['niveau'] =1)
    {
    //tout le code de ta page
    }
    else echo 'Vous n'avez pas accès à cette page';

    Tu peux faire ainsi après il doit y avoir d'autres manières de procéder que je ne connais pas.
    0
    1. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
       
      Non, car si tu n as pas acces, le code en php ne s affichera pas.. il n aura que le code html donc la redirection ;)

      de plus, tu peux protéger l acces à tes fichier php via le htaccess pour etre encore plus sur qu un esprit mal veuillant accedant en direct sur ton site (et non via un navigateur) ne puisse pas y acceder...

      cf https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/918580-protegez-un-dossier-avec-un-htaccess
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
     
    Personnelemnt, lorque l utilisateur se logue, je lui attribut un groupe que je met dans $_SESSION['group']... en loccurence, si je me connect ou un admin, $_SESSION['group']='admin' donc la premiere ligne de mon fichier php appele une fonction qui verifie cela, sinon, je le renvoie sur la page index ;)
    0
  7. beat
     
    Effectivement si tu veux rediriger faut mieux faire le test inverse, en debut de page:
    //si le niveau n'est pas celui des admin
    if ($_SESSION['niveau'] != 1)
    {
    //voila comment fonction la redirection
    header("location: tapage.php");
    }

    Ainsi, il sera directement redirigé s'il n'as pas accès à la page.
    0
    1. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
       
      on est bien d accord :D ;)
      0
  8. Aroeris
     
    Merci pour le tuto, je connaissais pas du tout le htaccess ! (debutant hihi)

    Et d'accord pour la verification je vais faire aussi faire comme ça dans ce cas !
    0
  9. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
     
    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 ;)
    0
  10. Aroeris
     
    Par les deux tu vx dire l'histoire des niveaux, et ma façon de faire ?
    0
    1. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
       
      par les 2 je veux dire tester en 1er si l utilisateur connecter est admin, et mettre en place le htaccess ;)
      0
  11. Aroeris
     
    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 ?
    0
  12. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    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
    0
  13. Aroeris
     
    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 ?
    0
  14. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    tu doit avoir un echo avant
    0
  15. Aroeris
     
    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.
    0
  16. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    a tu des include avant ?
    0
  17. Aroeris
     
    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>
    0
    1. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
       
      <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 !!
      0
  18. Aroeris
     
    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
    0
  19. Aroeris
     
    J'ai vu que tu avais oublier "<" au debut donc mea culpa, mais sinon ça ne marche pas , je ne suis pas rediriger : /
    0
  20. lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
     
    oupss, desolé,ca t'affiche quoi exactement ? la meme page ou un msg d'erreur ?
    0
  21. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
     
    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;
    }

    ?>
    }
    0
  • 1
  • 2