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

PHP & Base de données Discussion :

Système d'authentification POO [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 41
    Points : 28
    Points
    28
    Par défaut Système d'authentification POO
    Bonjour,

    Je me heurte aujourd'hui à un petit problème au niveau de la validation ou non d'un accès authentifié à une page.

    J'ai divisé mon code en plusieurs parties :

    Une classe identification.php qui est mon modèle, en interaction avec ma BDD :
    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
     
    <?php
    //
    class identification extends bddmanager
    {
        public function connexion($pseudo, $password)
        {
            $bdd = $this->bdd;
            if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['password'])) {
                extract($_POST);
                // on recupère le password de la table qui correspond au login du visiteur
                $query = "SELECT * FROM t_authentification WHERE AUT_PSEUDO=" . $_POST['pseudo'];
                $req = $bdd->prepare($query);
                $req->execute();
                while ($row = $req->fetch(PDO::FETCH_ASSOC)) {
                    if (row['AUT_PASSWORD'] != $_POST['password']) {
                        echo 'Mauvais login / password. Merci de recommencer';
                    } else {
                        session_start();
     
                        header('Location: index.php?action=auteur');
                    }
                }
            }
                else {
                    echo 'Vous avez oublié de remplir un champ.';
                }
            }
    }

    Un controleur administration.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    class Administration 
    {
        public function connectAdmin($pseudo, $password){
            $ei = new identification;
            $ei->connexion($pseudo, $password);
        }
    }
    Et enfin, ma vue associée :

    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
     
    include_once(PARTIAL . '_head.php');
    include_once(PARTIAL . '_nav.php');
     
    ?>
     
    <div id="contenu">
        <h1>Formulaire de connexion</h1>
        <form id="commentaire_form" action='index.php?action=connectAdmin' method="POST" enctype="multipart/form-data">
            <label>Pseudo: <br /><input type="text" name="pseudo"/></label><br/>
            <label>Mot de passe: <br /><input type="password" name="password"/></label><br/>
            <br /><input type="submit" value="Connexion"/>
        </form>
     
    </div>
    Le tout devrait, si l'authentification est réussie, me rediriger vers une page editeur.php.

    Or, aujourd'hui, quoique je rentre comme données, j'arrive sur un écran blanc, sans plus d'informations... (Même pas de message d'erreur... :'()

    Au niveau de mon petit bout de code dans ma BDD, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    insert into T_AUTHENTIFICATION(AUT_PSEUDO, AUT_PASSWORD, AUT_EMAIL) VALUES
      ( 'test', 'test', 'test@gmail.com');
    Je pense que mon souci se passe au niveau des variables, je ne les passe peut-être pas au bon endroit, mais je n'arrive pas à trouver le souci...

    Merci d'avance si vous avez des idées, je suis preneur de tout

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (row['AUT_PASSWORD'] != $_POST['password']) {
    Il manque le $ de $row.

    Et on ne met pas un mot de passe en clair dans une base de données, il faut le hacher.
    http://grunk.developpez.com/tutoriel...sse-securises/
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    En effet, je viens de le rajouter, mais je reste sur une redirection page blanche.

    L'action est donc censée être la fonction connectAdmin déclarée plus haut, mais en théorie, dans tous les cas je devrais être redirigé sur une des deux pages...

    pour le hachage, je m'en occuperai après, j'ai tout un tas de choses à sécuriser dans mon code, mais pour le moment je reste juste en local.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faudrait regarder ta page index.php pour voir ce qui s'y passe quand l'action est connectAdmin.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Mon index appelle une classe routeur tel que :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    <?php
     
     
    class Routeur {
     
    //    Déclaration des variables associées au différents controleurs
        private $ctrlAccueil;
        private $ctrlBillet;
        private $ctrlEpisodes;
        private $ctrlAuteur;
        private $ctrlContact;
        private $ctrlErreur;
        private $action;
        private $ctrlEditeur;
        private $ctrlAdministration;
     
    // Déclaration des méthodes créées dans chaque controleur
        public function __construct() {
            $this->ctrlAccueil = new accueil();
            $this->ctrlBillet = new billetunique();
            $this->ctrlEpisodes = new episodes();
            $this->ctrlAuteur = new auteur();
            $this->ctrlContact = new contact();
            $this->ctrlErreur = new erreur();
            $this->ctrlEditeur = new editeur();
            $this->ctrlAdministration = new administration();
        }
     
    // Traite une requête entrante -> Redirection automatique vers chacun des controleurs selon sélection
        public function routerRequete() {
            try {
                if (isset($_GET['action'])) {
                    $action = $_GET['action'];
                    switch ($action) {
                        case 'billet' :
                            $id = $_GET['id'];
                            $this->ctrlBillet->billetunique();
                            break;
                        case 'episodes' :
                            $this->ctrlEpisodes->listeEpisodes();
                            break;
                        case 'auteur' :
                            $this->ctrlAuteur->auteur();
                            break;
                        case 'contact' :
                            $this->ctrlContact->contact();
                            break;
                        case 'editeur' :
                            $this->ctrlEditeur->editeur();
                            break;
                        case 'administration':
                            $this->ctrlAdministration->administration();
                            break;
                        case 'addComment':
                            $params = $_POST['params'];
                            $controlleur = $this->ctrlBillet;
                            $controlleur->addComment($params);
                            break;
                        case 'connectAdmin' :
                            $pseudo = $_POST['pseudo'];
                            $password = $_POST['password'];
                            $controlleur = $this->ctrlAdministration;
                            $controlleur->connectAdmin($pseudo, $password);
     
     
                    }
                }
                else {
                    $this->ctrlAccueil->index();  // action par défaut
                }
            }
            catch (Exception $e) {
              $this->ctrlErreur->erreur();
            }
        }
    }

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne vois pas trop quel est le concept de mal écrire un code pour le corriger ensuite.
    La sécurité ça se pense dès le début.

    - ton extract() ne sert à rien et de toute façon l'utilisation de cette fonction est fortement déconseillé
    - tu utilises $_POST['pseudo'] alors que $pseudo est un paramètre de ta méthode
    - tu n'as pas mis de guillemets pour le pseudo dans la requête ... mais de toute façon il faut utiliser un paramètre pour la sécurité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function connexion($pseudo, $password)
        {
    	$bdd = $this->bdd;
            if(!empty($pseudo) && !empty($password)) {
     
                // on recupère le password de la table qui correspond au login du visiteur
                $query = "SELECT * FROM t_authentification WHERE AUT_PSEUDO= : pseudo";
                $req = $bdd->prepare($query);
                $req->execute(array(':pseudo'=>$pseudo));
    Pense à activer les exceptions PDO quand tu debugues, ton code actuel doit lever des erreurs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Ca roule, je vais revoir la sécurité ! Et c'est top, merci beaucoup, ça marche ! Je passe en résolu !

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

Discussions similaires

  1. système d'authentification au réseau interne
    Par tiloup367 dans le forum Développement
    Réponses: 3
    Dernier message: 27/09/2010, 23h05
  2. WCF et utilisation de 2 systèmes d'authentification différents
    Par micky3248 dans le forum Services Web
    Réponses: 2
    Dernier message: 30/06/2009, 08h18
  3. [Joomla!] Système d'authentification avec le navigateur
    Par moutey dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 27/04/2009, 17h34
  4. Cookie et système d'authentification
    Par Monkey_D.Luffy dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 23/06/2008, 11h24
  5. [Système] Problème authentification site
    Par bilowlex dans le forum Langage
    Réponses: 3
    Dernier message: 17/02/2007, 08h52

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