[php] Droit

Résolu/Fermé
Aroeris - 22 juil. 2009 à 12:39
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 - 26 juil. 2009 à 16:21
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.

25 réponses

lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
22 juil. 2009 à 20:53
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 samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
25 juil. 2009 à 19:27
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
Personne n'a une idée vraiment ? : /
0
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 vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
22 juil. 2009 à 14:58
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 vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
22 juil. 2009 à 14:47
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
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 vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
22 juil. 2009 à 14:55
on est bien d accord :D ;)
0
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 vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
22 juil. 2009 à 17:52
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
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 vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
22 juil. 2009 à 20:44
par les 2 je veux dire tester en 1er si l utilisateur connecter est admin, et mettre en place le htaccess ;)
0
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 samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
23 juil. 2009 à 21:28
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
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 samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
25 juil. 2009 à 18:55
tu doit avoir un echo avant
0
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 samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
25 juil. 2009 à 19:05
a tu des include avant ?
0
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 vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
26 juil. 2009 à 08:59
<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
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
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 samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
26 juil. 2009 à 06:28
oupss, desolé,ca t'affiche quoi exactement ? la meme page ou un msg d'erreur ?
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
26 juil. 2009 à 09:11
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