[php] Droit

Résolu
Aroeris -  
jjsteing Messages postés 1670 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.
A voir également:

25 réponses

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
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
Aroeris
 
Personne n'a une idée vraiment ? : /
0
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
jjsteing Messages postés 1670 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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jjsteing Messages postés 1670 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
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
jjsteing Messages postés 1670 Date d'inscription   Statut Contributeur Dernière intervention   181
 
on est bien d accord :D ;)
0
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
jjsteing Messages postés 1670 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
Aroeris
 
Par les deux tu vx dire l'histoire des niveaux, et ma façon de faire ?
0
jjsteing Messages postés 1670 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
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
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
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
lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
 
tu doit avoir un echo avant
0
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
lewis34 Messages postés 2557 Date d'inscription   Statut Membre Dernière intervention   352
 
a tu des include avant ?
0
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
jjsteing Messages postés 1670 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
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
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
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
jjsteing Messages postés 1670 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