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

MVC PHP Discussion :

Problème de conception avec le modèle MVC et les sessions


Sujet :

MVC PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Problème de conception avec le modèle MVC et les sessions
    Bonjour,

    Je suis en train de concevoir un site sur la base de Zend Framework avec une page d'identification dont l'adresse est http://site/

    Le site a l'arborescence suivante :
    application
    -->model
    -->view
    -->controller
    Zend framework
    -->zend

    Après une authentification réussi l'utilisateur se retrouve sur son espace à l'adresse suivante :
    http://site/home/

    Jusqu'ici tout va bien. Le problème c'est qu'il est possible d'accèder directement à son espace sans s'authentifier en tapant directement "http://site/home/"

    Comment interdire ce type de pratique et pallier à cette faille de sécurité?

    j'ai pensé à une gestion par session et redirection mais là j'ai un probléme de conception. Dois mettre le contrôle au niveau de l'index? des controllers? ou des pages dans view? En gros comment faire?

    Merci pour votre aide @+

  2. #2
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    Par défaut
    Salut,

    je pense qu'il faudrait que dans ton contrôleur HomeAction, tu vérifies si l'utilisateur a bien été logger, dans le cas contraire tu le rediriges.

    il faudra sans doute que tu utilises les sessions dans ce cas là

    sahid

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    ok.
    Si je comprends bien tu me proposes de faire une vérification au niveau de chacunes des fonctions qui composent les controllers?! Comment optimiser le code?

    C'est sûr que si je le faisais au niveau de l'index, je n'aurais qu'à le faire une fois

    Ci-dessous le code d'un de mes controllers :
    Code php : 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
    45
    46
    47
    48
    49
    50
    51
    52
     
    <?php
    Zend::loadClass("Zend_Controller_Action");
    Zend::loadClass("Zend_Validate_EmailAddress");
    Zend::loadClass("Zend_Filter_StripTags");
    Zend::loadClass('Zend_Session');
     
    class ConnexionController extends Zend_Controller_Action {
     
        public function displayAction() {
            // Récupération de la vue créée dans index.php
            $view = Zend::registry('view');
            // On appelle la vue qui devra 
            //s'afficher quand cette action est appellée
            echo $view->render('login.php');
        }
     
        public function checkinAction() {
            $view = Zend::registry('view');
     
            // vérifie l'existence d'un post :
            if (count($_POST) > 0) {
                // validation de l'email
                $email = $_POST["email"];
                $validator = new Zend_Validate_EmailAddress();
                if (!$validator->isValid($email)) {
                    Zend_Log::log(
                         print_r($validator->getMessages(),true)
                    );
                    $this->_redirect(ROOT_URL."/connexion?error=email+faux");
                }
     
                // Check email/password in ADD
                Zend::loadClass("model_Query");
                $confdbQuery = model_Query::getInstance();
                $rows = sizeOf($Query->checkUser($email, $password));
     
                // redirection
                if($rows<1){
                	$this->_redirect(ROOT_URL."/connexion?error=email ou password+faux");
                }
                else {
    	            $url = ROOT_URL."/home";
    	            Zend_Log::log("before redirection, url=$url");
    	            $this->_redirect($url);
                }
            }
            // si pas de POST, on affiche le formulaire
            echo $view->render("login.php");
        }
    }
    ?>
    Si on prend le code ci-dessus, il faudrait donc mettre une vérification au niveau de public function displayAction() et de public function checkinAction()?

    Aurais tu une proposition?

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Pour créer un système d'authentification avec le Zend Framework je te propose plutôt d'utiliser Zend_Auth :
    http://framework.zend.com/manual/en/zend.auth.html

    Si tu veux pouvoir gérer différents niveaux de droits d'accès aux informations tu peux aussi utiliser Zend_Acl :
    http://framework.zend.com/manual/en/zend.acl.html

    Ensuite pour bien intégrer le système d'authenficiation tu peux utiliser le système de plugin du Zend_Controller_Front pour vérifier si tel ou tel controller et tel ou tel action a le droit d'être vu par tel utilisateur.

    L'utilisation d'un plugin t'évitera de coller ton code de vérification un peu partout dans tes controlleurs.

    Tu pourra trouver un petit exemple ici :
    http://devzone.zend.com/node/view/id/1665

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Ca me paraît un peu compliqué tout ca alors que je veux juste que l'utilisateur passe avant tout par une authentification (login/mdp) pour accèder à son contenu et non pas directement en mettant une url qu'il aurait bookmarker par exemple.

    La gestion des droits fera partie d'une prochaine étape.

    Merci pour les liens quand meme mais mon probleme reste entier.

  6. #6
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Sans passer par un plugin, tu pourrais simplement vérifier si le user est authentifié dans la method init() de ton controller Home (callée juste après le constructeur).

    Autre solution, dans la method preDispatch() du Home controller, tu peux modifier le statut 'dispatched' de la requête et ainsi contourner l'appelle de l'action du controller (et repartir sur n'importe quel controller).

    Si plusieurs de tes controllers ont besoins d'un user authentifié, tu peux créer une hierarchie de controllers (un seul controller parent redéfinirait preDispatch() ou init())

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 20/05/2015, 13h36
  2. Problème de conception avec héritage
    Par oodini dans le forum C++
    Réponses: 3
    Dernier message: 24/01/2013, 11h43
  3. Problème de conception avec les mutex de Boost
    Par Benoit_T dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 22/03/2012, 17h15
  4. Problème de conception autour des modèles
    Par Myrza dans le forum Wicket
    Réponses: 1
    Dernier message: 17/01/2012, 10h55
  5. Problème de conception avec cases à cocher
    Par jbx50 dans le forum Modélisation
    Réponses: 4
    Dernier message: 27/03/2008, 11h28

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