[php] Droit
RésoluJ'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
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.
-
faute de frappe ... zarbi je l'avait pas vu lol!!
-
Je suis en anonyme ya pas la case !
-
Contributeurah .. une ptite faute de frappe, ca change tout !!
:p
met ton post en résolu ;) -
C'est bon j'ai trouvé !!
y'avait un probleme de "\" devant des guillemets dans la condition
Merci bcp pour votre aide ! -
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 } ?> -
Contributeurperso..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;
}
?>
} -
oupss, desolé,ca t'affiche quoi exactement ? la meme page ou un msg d'erreur ?
-
J'ai vu que tu avais oublier "<" au debut donc mea culpa, mais sinon ça ne marche pas , je ne suis pas rediriger : /
-
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 -
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>'; } -
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> -
a tu des include avant ?
-
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. -
tu doit avoir un echo avant
-
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 ? -
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 -
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 ?
-
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 -
Par les deux tu vx dire l'histoire des niveaux, et ma façon de faire ?
-
Contributeurle 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