S'enregistrer | Rechercher | FAQ | Liste des Membres | Groupes d'utilisateurs | Connexion

  Nom d'utilisateur:    Mot de passe:       

  

Poster un nouveau sujet   Répondre au sujet Page 1 sur 1
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
MessagePosté le: Jeu Fév 25, 2010 9:40 pm    Sujet du message: système d'administration sécurisée Répondre en citant

HACKIRA
Projets


 
Inscrit le: 09 Avr 2009
Messages: 17



Bonjour a tous,
Je souhaiterais faire un système d'administration protégée (au max si possible) pour une boutique en ligne (future).
J'ai commencé par essayer les sessions, mais c'est assez complexe et sur les tutos que j'ai regarder je trouve ca très vague comme explications.
J'ai ensuite essayer de passer par les cookies mais j'ai l'impression que c'est pas beaucoup sécurisé.
j'ai pondu ce bout de code la :
Code:
<?php
// Démarrage de la session
session_start();
?>

<?php
if(isset($_SESSION['login']))
    {
   mysql_connect("Localhost","root","");//connexion a la base de données
   mysql_select_db("users");//selection de la base users
   $comparaison_mot_de_passe = mysql_query("Select * from utilisateur where Identifiant='$_POST[login]' and MDP='$_POST[mdp]'") or die(mysql_error());
   mysql_close();//deconnexion de mysql
   //si tout est bon on inclue la page d'administration
   include ('administration.php');
      
      //code pour les membres

        // identification de l'utilisateur
        $user = $_SESSION['login'];
       
        // informations pour l'utilisateur
    }
else
    {
        // Code pour les non-membres
      echo 'Bonjour cher visiteur vous devez vous identifier pour pénétrer dans l\'administration';
      echo '<a href="formulaire.php"> Retour</a>';
    }
?>


il s'agit d'essai d'utilisation des sessions seulement les explications que j'ai vu sur les tutos sont resté assez vague donc si une âme charitable pouvais m'aider ca serais sympa Smile
Merci d'avance
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Jeu Fév 25, 2010 11:01 pm    Sujet du message: Répondre en citant

Manu404
Modérateur


 
Inscrit le: 26 Fév 2008
Messages: 2219
Localisation: ::1:



Deux trois trucs qui me font un peux peur. Le nom de ta DB, compte tu utiliser les DB de cette manière ? une DB User, une DB articles etc ??
Fait plustot une DB <nom_du_site/portail> et dans cette db un tables user.
Ensuite utilise les vues.
Bon le code. Tu teste la présence du variable de session. Ce qui veux dire que les membres enregistré mais non admin auront acces a l'execution du code pour la verif de l'admin.
Ensuite, tu fait ta request SQL mais tu ne verifie a aucun moment son resultat. Pas de If sur le retour de la request SQL... Donc n'importe qui, a condition qu'il soit membre, fera un include de admin.php.
Ensuite, dans ta request, verifie les données qui te sont trasnmises en moyen de regex afin d'eviter les 'xxx or 1=1' et autres injections de bases SQL.
Par contre un bon reflexe, tu ferme ta connection SQL. Par contre, ne ferme ta connection SQL que en fin d'instruction. si tu as 10 request à faire, ne co/deco pas 10 fois ^^
Et enfin, je ne comprend pas ce que tu fait avec l'instruction après le indlude...
Sliim, tu es dev php/web, que rajouterais-tu ?
Voir le profil de l'utilisateur Envoyer un message privés Envoyer un e-mail Visiter le site web de l'utilisateur Messagerie Instantanée MSN Messenger
MessagePosté le: Ven Fév 26, 2010 8:57 am    Sujet du message: Répondre en citant

HACKIRA
Projets


 
Inscrit le: 09 Avr 2009
Messages: 17



bon bah déjà merci manu pour toute ces précisions ca va me permettre d'avancer un temps soi peu Smile

Pour le nom de la db c'est juste pour tester je me doute bien que ca serait trop simple a trouver lol Smile

pour la vérification admin il va falloir que je teste un peu partout si il y a des droits admin donc car il est vrai que je ne vérifie rien pour le moment Smile

pour les injections SQL il va falloir que j'apprenne les instructions POSIX pour faire le regex et de ce que j'ai vu c'est assez complexe en soi donc je vais pour le moment m'arrêter à la page d'administration et à ses vérifications.

Pour ce qui est de l'instruction après le include il fait partie de la base du code que j'ai pris sur internet (structure d'une page avec session) et donc il s'agit juste d'un oublie de ma part il faut que je l'enlève car cela définissait normalement l'utilisateur ayant rentré un pseudo, et aucun contrôle n'était fait.
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Ven Fév 26, 2010 11:36 am    Sujet du message: Répondre en citant

Sliim
Site Admin


 
Inscrit le: 16 Mai 2008
Messages: 1177



Salut,

Citation:
Je souhaiterais faire un système d'administration protégée (au max si possible) pour une boutique en ligne (future).

Sans vouloir te démotiver, un site e-commerce se vend dans les 10aines de milliers d'euros, donc je te laisse imaginer le taf que ça représente et les qualifications requises. Il serait peut être plus raisonnable de penser à un site basique, un minimum dynamique pour commencer Wink.

Cela dit, manu a déjà fait un bon rapport au niveau du code que tu as posté Razz.

En ce qui concerne les sessions / cookies, les sessions vont te permettre de gérer les users connectés ou non, stocker leurs droits etc..
Imaginons une table `users` (très basique) :
Citation:
| id | name | password | level |


Beh genre quand l'user se connectera, tu iras chercher les variables contenue dans le tableau $_POST (méthode post et non get hein, pas question de voir le mot de passe dans l'url Wink) Tu testeras ses données envoyées en faisant bien attention à ce que les injections de codes soient impossible et ensuite tu les enregistres dans ta session.

exemple de récupération de données :
connexion.php
Code:

<?php
session_start();
if(key_exists('name', $_POST){
   $name = addslashes(htmlentities($_POST['name']));
   $password = md5($_POST['password']);

   $query = 'SELECT * FROM `users` WHERE `name`=' . $name;

   mysql_connect('hostDb','userDb','mdpDb') or die('Impossible de se connecter au serveur de base de données');
   mysql_select_db('users') or die('Impossible de se connecter à la base de données');

   $resultQuery = mysql_query($query);
   if(mysql_num_rows($resultQuery) == 1){
      $data = mysql_fetch_assoc($resultQuery);
      //Maintenant que l'user c'est identifié, on enregistre ses infos dans les sessions
      if($password == $data['password']){
         //Connexion ok
         $_SESSION['user']['id'] = $data['id'];
         $_SESSION['user']['name'] = $data['name'];
         $_SESSION['user']['level'] = $data['level'];
      }
      else
         //Mauvais mot de passe
   }
   else
      echo 'connexion échouée';

   mysql_close();
}
else
   //Aucune demande de connexion n'a été envoyé


Ça en gros c'est pour la connexion.

Ensuite une fois connecté, pour vérifier son niveau d'autorisation d'accès au site on utilise le champ `level` de la table `users` donc la valeur de $_SESSION['user']['level']

Code:

<?php
session_start();
if(isset($_SESSION['user']['level']){
   switch($_SESSION['user']['level']){
      case 1:
         //Accès admin
         break;
      case 2:
         //Accès user basique
         break;
}
else
   /Accès visiteur


Voilà à peu près, ces exemples de code sont tappés vite fais dans le textarea du forum donc je ne garantie pas le fonctionnement du copier/coller. Mais au niveau du principe c'est ça Razz.

Après les cookies, ils peuvent être utiles, dans le cadre d'un site e-commerce, pour le panier de l'utilisateur par exemple. Utiliser les sessions auraient pour conséquences de perdre le panier si l'user venait à fermer son navigateur. Avec les cookies, ils sont stockés sur la machine cliente et donc sont récupérés à chaque fois que l'user va sur ton site (à condition que l'user ne les ait pas supprimé). Même après un BSOD l'utilisateur pourra retrouver son panier tel qu'il était lorsqu'il a quitté ^^.

Donc voilà, session, cookie, deux choses utiles mais à utiliser intelligement et avec modération. Il faut bien analyser les besoins avant de se lancer Wink. En ce qui concerne les connexions utilisateurs, c'est la plupart du temps les sessions qui sont utilisées (voir tout le temps). Le panier d'un user on utilisera plutôt les cookies pour la raison évoquée ci-dessus. Pour les autres fonctionnalité de ton site il faudra que tu y réfléchisse Razz.

++
Sliim


Dernière édition par Sliim le Ven Fév 26, 2010 4:02 pm; édité 1 fois
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Messagerie Instantanée
MessagePosté le: Ven Fév 26, 2010 12:37 pm    Sujet du message: Répondre en citant

HACKIRA
Projets


 
Inscrit le: 09 Avr 2009
Messages: 17



OUAAAHHH !!!! lol ca c'est de l'explication claire et concise Smile merci sliim
Pour le fonctionnement je pense que j'ai compris et donc dans le cas d'un e-commerce il vaut mieux utiliser les sessions pour les connexions user et les cookies pour le panier.

Pour ce qui est de l'e-commerce je n'y suis pas encore lol j'en suis très très loin, il s'agit juste pour le moment de faire la partie administration et connexion clients Smile
On va y aller petit a petit Very Happy

pour se qui est de la connexion je préfère le $_POST car ça n'apparait pas dans l'url et ca serais trop dangereux en $_GET

Pour ce qui est de ton exemple c'est le plus parlant de tout ceux que j'ai put voir c'est très intéressant de voir ça comme ca Smile

J'ai quand même une petite question pour la vérification du niveau d'autorisation tu met ça dans un fichier a part ou dans le même fichier ca peut le faire ?
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Ven Fév 26, 2010 3:58 pm    Sujet du message: Répondre en citant

Sliim
Site Admin


 
Inscrit le: 16 Mai 2008
Messages: 1177



Tu as raisons pour $_POST Wink, mais c'est pas pour autant qu'il faut laisser $_GET de côté, il a ses avantages aussi (comme le passage de paramètres via un simple lien, pas obligé de passer par un formulaire) Wink.

En ce qui concerne ta question je sais pas si j'ai vraiment compris. Je vais essayer de répondre quand même.

Je suppose que les fichiers dont tu parles sont les fichiers php de ton site. En fait c'est à toi de voir comment tu organises ton arborescence de fichier.

En fait mon premier segment de code correspond à la connexion au site. Donc tu peux créer un fichier spécifique à la connexion, par exemple connexion.php, que tu appelleras lors du submit du formulaire.
L'autre segment de code correspond à la vérification du niveau d'autorisation. Ce code peut être intégré dans chaque fichier qui requiert cette vérification ou alors si tu ne souhaites pas dupliquer ton code (chose que je conseil, et je ne suis pas le seul ici Razz) tu peux faire un truc du genre :

levelAccess.php
Code:

<?php
session_start();

$admin = false;
$member = false;
$visitor = false;

if(isset($_SESSION['user']['level']){
   switch($_SESSION['user']['level']){
      case 1:
         $admin = true;
         break;
      case 2:
         $member = true;
         break;
}
else
   $visitor = true;


Tac, maintenant que tu as ce fichier, tu peux l'inclure dans toute les pages où il faut vérifier le niveau d'accès de l'utilisateur.

Par exemple une page d'administration tu fera ça :

admin.php
Code:

<?php
include('levelAccess.php');
if($admin){
   //L'utilisateur est un admin, on autorise donc l'affichage de la page
}
else
    exit('Vous n\'avez pas accès à cette page!');


Ce n'est qu'un exemple, il y a bien sûr d'autre façon de procéder, mais avec cette méthode le code de levelAccess.php est unique, et donc si tu as besoin de le modifier tu auras moins de galère car tu n'auras qu'un fichier à modifier au lieu de toute tes page admin par exemple. Moins tu duplique ton code, moins tu galères par la suite pour faire des modifs Wink.

Voilà si je n'ai pas répondu à ta question dis le moi ^^. Si tu as d'autres question n'hésites pas Wink.

++
Sliim
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Messagerie Instantanée
MessagePosté le: Sam Fév 27, 2010 6:30 pm    Sujet du message: Répondre en citant

HACKIRA
Projets


 
Inscrit le: 09 Avr 2009
Messages: 17



Et bien en fait tu as parfaitement répondu a ma question Smile
je te remercie de tout ces détails Smile
Le exit c'est pour éviter que du code php ne s'exécute encore après la vérification il me semble car je n'ai jamais vu cette commande la dans un tutoriel ...
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Lun Mar 01, 2010 10:05 am    Sujet du message: Répondre en citant

Sliim
Site Admin


 
Inscrit le: 16 Mai 2008
Messages: 1177



Yep, exit() stop le script php, donc tout ce qui se passe derrière (ou est censé se passer) n'a pas lieu.
Un site utile pour les fonctions php : php.net.
Genre tu as besoin d'info sur la fonction exit :
http://www.php.net/exit Wink

++
Sliim
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Messagerie Instantanée
Poster un nouveau sujet   Répondre au sujet Page 1 sur 1

  


 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum



110251 Attacks blocked