Bonjour à tous !
Je suis en train de développer un site en php, et j'ai une question sur la sécurité (histoire que je me retrouve pas avec des failles partout).
Le site doit pouvoir accueillir deux types de personne : les utilisateurs lambdas, et les admins. Bien évidemment, ils n'ont pas la même interface ni les mêmes droits.
Du coup, dans mon fichier checklogin.php, je fais ça :
Je récupère dans ma base postgresql le champ "rights", si il vaut 0, c'est un admin, s'il vaut 1, c'est un user.
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 while ($row = pg_fetch_array($result)) { if (check_password($pwd, $row[0])) { $_SESSION['myusername']=$login; $_SESSION['rights']=$row[1]; } } if($_SESSION['rights']==0) { header("location:../indexadmin.php"); } else if($_SESSION['rights']==1) { header("location:../indexuser.php"); }
C'est ensuite que ça se complique. Sur ma page indexadmin.php je fais :
Comme j'ai rempli ma variable de session rights au moment du check, en extrayant la valeur de ma base de donnée, l'utilisateur doit être rejeté s'il n'a pas un rights=0. Mais est-il possible pour un attaquant de contourner ça, et de changer la variable de session ? Je précise que je ne touche pas à cette variable là à d'autres endroits, seulement dans le checklogin, et donc à cet endroit là pour vérifier la valeur dedans.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?php session_start(); if(!isset($_SESSION['myusername'])){ header("location:login.php"); } if($_SESSION['rights'] !=0){ header("location:error.php"); } ?>
Partager