IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

impossible d'accéder à l'espace sécurisé malgré un login correct


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 115
    Points : 50
    Points
    50
    Par défaut impossible d'accéder à l'espace sécurisé malgré un login correct
    Bonjour à tous,

    Voilà je démarre avec cakephp en venant de ruby on rails au départ.
    J'ai un petit souci avec l'accès à des pages protégées.

    En fait j'ai créé une route "/admin" qui est protégé par un accès restreint donc automatiquement lorsqu'on essaie d'accéder à monsite.com/admin, on est redirigé vers une page "/login".

    Lorsque j'introduis mon login et mot de passe (ils sont bien corrects et existent dans la dabase), je reçois le message "vous n'avez pas accès à cette page". J'ai cherché dans mon code où pourrait se situer le souci de permission mais je ne vois pas? on dirait que la page que j'essaie d'atteindre (page /admin/promos) n'enregistre pas le fait que je viens de me loguer et du coup me renvoyer toujours vers ma page "/login".

    Je mets le code ci-dessous en espérant que vous pourrez m'aider

    users_controller.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?php
    class UsersController extends AppController
    {
      var $name = 'Users';
     
        function login(){
        $this->layout = 'admin_default';
        $this->set('title', 'Administration connexion');
        }
     
        function logout(){
        $this->Session->setFlash("Vous êtes maintenant déconnecté.");
        $this->redirect($this->Auth->logout());
        }
    }
    ?>
    promos_controller.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?php
    class PromosController extends AppController {
        var $name="Promos";
     
        function index() {
            $liste_des_promos = $this->Promo->find('all');
            $this->set('promos', $liste_des_promos);
            $this->set('title', 'promotions');
        }
     
        function admin_index(){
             $promosRecents = $this->Promo->find('all');
             $this->set('promosRecents', $promosRecents);
     
        }
    }
    ?>
    app_controller.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
    class AppController extends Controller
    {
      var $helpers = array ('Html', 'Text', 'Form');
     
      var $components = array('Auth');
     
      function beforeFilter()
      {
        if(isset($this->Auth))
        {
          $this->Auth->userModel = 'User';
          $this->Auth->fields = array('username' => 'login', 'password' => 'password');
          $this->Auth->userScope = array('User.disabled' => 0);
          $this->Auth->loginAction = '/users/login';
          $this->Auth->loginRedirect = '/admin/promos';
          $this->Auth->loginError = "username or password not correct";
          $this->Auth->logoutRedirect = '/';
          $this->Auth->authError = "You don't have access to this page.";
          $this->Auth->autoRedirect = true;
          $this->Auth->authorize = 'controller';
     
          if((empty($this->params['prefix']) || $this->params['prefix'] != 'admin') && $this->action != 'login')
          {
            $this->Auth->allow();
          }
        }
      }
     
      function isAuthorized()
      {
        return true;
      }
     
      function beforeRender()
      {
        if(isset($this->params['prefix']) && $this->params['prefix'] == 'admin')
        {
          $this->layout = 'admin_default';
        }
      }
    }
    ?>
    les routes:

    Router::connect('/admin', array('controller' => 'promos', 'action' => 'index', 'prefix' => 'admin'));
    Router::connect('/login', array('controller' => 'users', 'action' => 'login'));

    Merci à tous!

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par san1981 Voir le message
    Lorsque j'introduis mon login et mot de passe (ils sont bien corrects et existent dans la dabase), je reçois le message "vous n'avez pas accès à cette page". J'ai cherché dans mon code où pourrait se situer le souci de permission mais je ne vois pas? on dirait que la page que j'essaie d'atteindre (page /admin/promos) n'enregistre pas le fait que je viens de me loguer et du coup me renvoyer toujours vers ma page "/login".
    Bonjour san1981,
    Lorsque tu dis que le mot de passe est correct et stocke dans la base de donnees, es-tu sur qu'il l'est de maniere cryptee ?

    En effet, le mot de passe est automatiquement crypte par le composant Auth (par defaut c'est du sha1 du mot de passe associe avec un security salt) avant la comparaison. Donc si le mot de passe de ta bdd est "toto" en clair, tu n'arriveras pas a te connecter en tapant "toto" comme mot de passe.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 115
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par real34 Voir le message
    Bonjour san1981,
    En effet, le mot de passe est automatiquement crypte par le composant Auth (par defaut c'est du sha1 du mot de passe associe avec un security salt) avant la comparaison. Donc si le mot de passe de ta bdd est "toto" en clair, tu n'arriveras pas a te connecter en tapant "toto" comme mot de passe.
    Bonjour Real34,

    Pour créer mon user dans ma database, j'ai fait un insert into dans phpMyAdmin directement en utilisant le sha1(12341548motdepasse), le numéro correspondrait à mon numéro security salt de mon core.php.

    Si j'ai bien compris le principe de cryptage, lorsque j'essaie de me loguer je peux alors mettre "motdepasse" simplement?

    Par contre je ne sais pas si le lien se fait entre le moment où je clique sur "me loguer" et ma base de données car le debug ne renvoie rien après ma tentative de connexion.
    Pourtant lorsque j'ouvre ma page /login, le debug me signale 1 query dans la database.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par san1981 Voir le message
    Par contre je ne sais pas si le lien se fait entre le moment où je clique sur "me loguer" et ma base de données car le debug ne renvoie rien après ma tentative de connexion.
    Pourtant lorsque j'ouvre ma page /login, le debug me signale 1 query dans la database.
    Tu ne vois rien car Auth fait une redirection, donc la page que tu vois n'est pas celle qui traite les donnees (et donc fait la requete en traitant les parametres POST).

    Si tu veux pouvoir debugguer la requete il te faudra bloquer la redirection en affichant un texte avant (pour generer un "header already sent"), c'est pas hyper propre mais facile a faire !

    Ajoutes ce code dans ton UsersController::beforeFilter() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public function beforeFilter() {
    		parent::beforeFilter();
    		if ($this->action == 'login') {
    			debug($this->data); // A ce moment la le mdp n'est pas encore crypte
    		}
    	}
    Et tu devrais maintenant voir en bas de page :
    SELECT `User`.`id`, `User`.`login`, `User`.`password`, `User`.`name`, `User`.`is_admin`, `User`.`created`, `User`.`modified` FROM `users` AS `User` WHERE `User`.`login` = 'admin' AND `User`.`password` = '443b651c23077f49a3b5475c31cd070ad396e1bb' LIMIT 1

    Verifies que les hash correspondent afin d'eliminer cette eventualite dans la liste des problemes possibles

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 115
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par real34 Voir le message

    Ajoutes ce code dans ton UsersController::beforeFilter() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public function beforeFilter() {
    		parent::beforeFilter();
    		if ($this->action == 'login') {
    			debug($this->data); // A ce moment la le mdp n'est pas encore crypte
    		}
    	}
    Et tu devrais maintenant voir en bas de page :
    SELECT `User`.`id`, `User`.`login`, `User`.`password`, `User`.`name`, `User`.`is_admin`, `User`.`created`, `User`.`modified` FROM `users` AS `User` WHERE `User`.`login` = 'admin' AND `User`.`password` = '443b651c23077f49a3b5475c31cd070ad396e1bb' LIMIT 1

    Verifies que les hash correspondent afin d'eliminer cette eventualite dans la liste des problemes possibles
    Bonjour Real34,

    En ajoutant la fonction beforeFilter, je ne vois pas ce que je devrais voir je pense? Lorsque j'ai introduit le mot de passe, je vois juste app\controllers\users_controller.php (line 11)

    J'ai certainement fait une erreur mais je ne vois pas du tout où

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Est-ce que tu pourrais copier le code de ton formulaire de connexion ? Il se peut qu'il y ait une erreur avec celui-ci ...

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2005, 01h46
  2. Accéder à un espace Excel dans un formulaire Access
    Par Ronin-MK dans le forum Access
    Réponses: 6
    Dernier message: 14/11/2005, 21h05
  3. Impossible d'accéder aux tables non créées par dbo
    Par Pete dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2005, 14h01
  4. Réponses: 4
    Dernier message: 11/03/2005, 20h31
  5. Accéder à un espace mémoire sous XP
    Par keny dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2002, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo