Page 1 sur 2
sécurisation de l'acces au site
Posté : 06 sept. 2006, 16:47
par AUDE
Bonjour,
Voila, je suis en trein de créer un site, afin de gerer les droit d'acces en fonction des utilisateurs ou des groupes je voudrais savoir si il est mieux de gerer ceux-ci avec les droits et utilisateur mysql directement grace a un create user....... ou il est preferable denregistrer les mots de passe, le nom d'user...dans la base en cachant le mots de passe bien sur ?
Merci d'avance, en espérant que vous m'aurez compris
Posté : 07 sept. 2006, 08:32
par zizou59
bonjour!
je n'ais pas tout compris l'objet de ta question !!!
pour proteger ton site je te conseil de creer des sessions utilisateur avec un id[rang] dans ta BDD et crypt les $mdp en [md5] par exemple !!!
rien de plus simple non?

Posté : 07 sept. 2006, 08:40
par Cyrano
Il faut distinguer la restriction d'accès à certaines parties de ton site de l'accès à MySQL. Tous auront selon les pages qu'ils utilisent besoin d'une connexion à MySQL, mais ils utiliseront tous la même. En revanche, pour accéder à certaines parties du site lui-même, tu dois le gérer dans ta programmation. Je te suggère l'utilisation de sessions et comme l'a mentionné zizou59 d'utiliser une variable identifiant le niveau d'accès. Dans ta programmation ensuite, tu devras tester la valeur de cette variable pour décider si tu affiches le contenu où si tu rediriges ailleurs pour cause d'accès interdit pour le niveau en cours.
À la base, tu peux compter quatre niveaux :
- visiteur non identifié;
- visiteur normal identifié
- administrateur restreint (n'accède qu'à une partie de l'administration)
- administrateur général (gère les accès de tout le monde et a un accès complet partout)
libre à toi ensuite d'ajouter des niveaux intermédiaires supplémentaires.
Posté : 07 sept. 2006, 08:51
par Aude
Bonjour,
j'ai deja lu plusieurs tutorial sur les sessions mais je n'ai pas compris, est-ce que vous auriez un tutorial, un site ou il les expliquerais facilement ?
Sinon je parlais des droit et utilisateur géré par mysql.
Grace à
CREATE USER 'recrutement'@ '%' IDENTIFIED BY '*********';
GRANT CREATE , ALTER ON `base`.`employé` TO 'recrutement'@'%';
et ensuite d'utiliser pour se connecté sur la base :
// information pour la connection à le DB
$host = 'localhost';
$user = 'recrutement';
$pass = 'password';
$db = 'base';
// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
?>
suite a des champ de teste qui demande le nom d'utilisateur et le mot de passe bien sur.
Voila, est-ce correcte de faire comme cela ?
J'ai plus d'une vingtaine d'utilisateur qui auront des accès totalement différent celon les fenetres de meme que certain auront seulement le droit de lire dautre d'ajouter d'autre aucun acces........
Ainsi en fonction des droits atribué si la personne n'a pas les droit il y aura un message pour dire qu'il na pas acces a cette parti.
voila que me conseillé vous ?
merci
Posté : 07 sept. 2006, 09:00
par Aude
merci cyrano, je n'avais pas tres compris le systeme des sessions.
Je voulais ajouter que du jour au lendemain des utilisateurs nouveau peuvent s'ajouter au utilisateur et qui pourrai avoir des droits totalement nouveau a l'existant, par exemple un nouveau poste se créer dans l'entreprise et il n'a pas les meme acces. Je serais donc obliger de tout modifier le code, alors que sinon il suffirai seulement de creer un nouvelle utilisateur et de lui attribué les droits selon la table. Je precise que j'ai plus de 90 tables a gérer.
merci vos aides me sont précieuse.
Posté : 07 sept. 2006, 09:28
par Cyrano
Ce n'est pas un problème et précisément, l'accès géré par session te donne la souplesse nécessaire : tous les utilisateurs accèdent à MySQL sans devoir s'identifier eux-même : les paramètres de connexion à MySQL sont les mêmes pour tous.
En revanche, il te faut arriver à modéliser la manière de gérer l'ajout des niveaux d'accès. Si un nouvel utilisateur est inscrit avec des paramètres complètement différens de l'existant, il faut alors savoir à quelles pages il pourra accéder. Si tu bloques l'accès à certaines tables sans bloquer l'accès aux pages utilisant ces mêmes tables, tu vas avoir des erreurs à n'en plus finir. Donc la méthode qui me semblerait la plus appropriés, ce serait d'avoir un systeme de tableau indiquant pour chaque page quelles tables sont utilisées. il te faut ensuite un système pour définir qui accède ou non à quelle page avec un genre de code. À partir de là, pour chaque utilisateur, en limitant l'accès à certaines tables, tu peux par voie de conséquence définir à quelles pages il peut ou non accéder.
Il faut un système suffisament générique pour prévoir toutes les possibilités sans devoir toucher au code à chaque ajout d'un utilisateur. C'est l'administrateur général qui va gérer sur la base de listes déroulantes ou de cases à cocher par exemple pour créer un nouveau profil.
Posté : 07 sept. 2006, 10:16
par Aude
Merci beaucoup pour toutes ses explications.
Encore une dernière question, est-ce que tu saurais ou je pourrais trouver un tutorial bien expliqué sur les sessions.
merci pour tout
Posté : 07 sept. 2006, 10:27
par Cyrano
Je vais simplifier, tu vas voir que ce n'est pas particulièrement sorcier. Il y a un tuto sr le site de PHPFrance et il doit y en avoir aussi sur phpdebutant ou le site du zéro. Mais les bases fondamentale:
Au chargement d'une page, la toute première instruction sera session_start()
avant le moindre bout de code html.
À partir de là, tu disposes d'une variable super-globale $_SESSION qui est un tableau. il te reste à initialiser la valeur et tu peux par exemple créer une variable de session simplement en faisant :
<?php
session_start();
//... du code ...
$_SESSION['niveau_acces'] = "ABCD";
// ... etc...
?>
Au chargement d'une page, tu peux tester la valeur de cette variable sur simple appel et ouvrir ou non la page :
<?php
session_start();
if($_SESSION['niveau_acces'] == "ABCD")
{
// Le niveau est bon, on affiche le contenu normal
// code normal de la page
}
else
{
// Le niveau ne correspond pas, on redirige vers la page d'identification.
header("./identification.php");
}
?>
Bien entendu, ce sont des exemples très basiques, tu peux améliorer à l'envi.
Posté : 07 sept. 2006, 10:36
par zizou59
oui c'est vrai que cyrano est un peu plus clair que moi dans les explication c'est pas pour rien
en ce qui concerne un tutorial sur les sessions tu en trouvera sur php-debutant ou devellopez.com voir même si j'ai bonne mémoire en consultant la
FAQ de ce forum ...

tu pourras voir que c'est pas si compliqué a construire une gestion utilisateur...
et pour répeter entre guillemet ce q'ua si bien dis
cyrano pour la restriction genre administrateur: tu fais comme ceci en début de page pour exemple admin.php:
0=visiteurs
1=admin
2=modo
3=membre
session_start()
if ($session['rang']==1){
//blablabla
}else{
(header location:index.php);
}
Posté : 07 sept. 2006, 11:25
par Aude
Oki merci, je vais essayer de me debrouillé avec tout ça.
quand tu me dis cyrano de créer un tableau pour les differentes feuilles et de preciser les tables utiliser. Je dois créer ça dans une table de la base ?
merci
Posté : 07 sept. 2006, 11:28
par Cyrano
Je dois créer ça dans une table de la base ?
C'est une possibilité oui, faut voir ce qui sera le plus simple pour toi et pour l'efficacité du fonctionnement de ton application.
Posté : 08 sept. 2006, 09:18
par Aude
Je suis en trein dessayer de mettre en place cette solution, mais pour savoir si telle ou telle personne a un acces sur le fichier, pour cela tout mes fichiers sont repertorier dans une base. Mais j'airerais savoir quand on est sur une fenetre comment savoir le nom du fichier, pour puvoir ensuite le comparer avec la base.
en gros, je voudrai savoir quel commende esiste pour mettre dans une variable le nom du fichier en cours.
merci
Posté : 08 sept. 2006, 10:09
par Cyrano
Rien de plus simple : tu crées une variable et tu lui assignes une valeur :
<?php
$variable = "valeur";
?>
Reste donc à récupérer le nom de ton fichier et à l'affecter à une variable. Dans ton cas, il y aura certainement plusieurs fichiers, il pourrait être plus intéressant d'utiliser un tableau indexé. Donc tu pourrais récupérer la liste des noms via une requête SQL selon certains critères et affecter les noms dans un tableau:
<?php
$variable = array("fichier_1", "fichier_2", ..., "fichier_n");
?>
Et ensuite tu travailles sur le tableau. Pour les tableaux, jette un coup d'oeil dans le forum FAQ, il y a un sujet sur les tableaux qui te servira sûrement.
Posté : 08 sept. 2006, 10:30
par Aude
non, en faite ce n'est pas ça que je voulais, en faite quand je suis sur une fenetre, j'aimerai savoir la commande qui permet de connaitre le nom du fichier sur lequel je suis.
Je travail a partir d'une table sur mysql et non un partir d'un tableau car j'ai plus de 350 fichiers de code. Donc je pense que c'est plus judicieux.
merci
Posté : 08 sept. 2006, 10:33
par Cyrano
l'un n'empèche pas l'autre. Comment récupères-tu tes noms de fichiers ? Dans la base ?