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

Langage PHP Discussion :

[Cookies] Classe de connexion à l'admin


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut [Cookies] Classe de connexion à l'admin
    Bonsoir tous le monde,
    j'essaie de me construire une class pour la connections a l'administration des admins et j'aimerai savoir si je suis sur la bonne voie.
    En fait le formulaire sera des plus simpliste:

    1. 2 champs (users et pass)
    2. L'envoi
    3. message d'erreur éventuelle

    Je ne souhaite pas d'inscription donc simplement se connecter a l'administration.
    Cependant j'utilise PDO pour me connecter a la base de donnée et je doit implémenter les sessions + tous ce qui va avec (en gros je devrais me renseigner pour sécuriser tous sa)
    Voici le code pour l'instant sans savoir si cela fonctionnera:
    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
    class UserAuthLogin{
     
    	public $users_login;
    	public $mdp_login;
     
    	function __construct(){
    		$this->users_login = $_REQUEST['users'];
    		$this->mdp_login = sha1($_REQUEST['cryptpass']);
    	}
    	function LoadAuth(){
    		try{
    			$dbh = new PDO('mysql:host=localhost;dbname=madb','root','******');
    			$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    			$stmt = $dbh->prepare("SELECT DISTINCT id_user,users from member where :users and :cryptpass");
    		    $stmt->bindParam(':users',$this->users_login,PDO::PARAM_STR);
    		    $stmt->bindParam(':cryptpass', $this->mdp_login,PDO::PARAM_STR);
    			$stmt->setFetchMode(PDO::FETCH_ASSOC);
    			$stmt->execute();
    			$result = $stmt->fetchAll();
    		}catch(Exception $e) {
    				echo ("Erreur ! : " . $e->getMessage() . "<br/>");
    				echo 'N° : '.$e->getCode();
    		}
    		return $result;
    	}
    	function AuthSession(){
    		if (isset($this->users_login)) {
    			self::LoadAuth();
    			$_SESSION['userid'] = $this->users_login;
    			$_SESSION['username'] = $this->mdp_login;
    			header($page);
    		}
    	}
    }

  2. #2
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Quelques remarques vite fait :
    - $_REQUEST c'est mal, préfère $_GET ou $_POST
    - je mettrais les variable membre login/motdepasse en private
    - faudrait tester avec isset si le login/mdp existe avant de l'affecter à une variable
    - pas de catch dans une classe, c'est pas a ce niveau que tu gère les erreur. (j'ai pas dit pas de try hein )
    - self:: s'utilise pour les classe statique, utilise $this-> plutot dans ce cas

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    Bon j'ai corriger , arrêter moi si je me suis trompé

    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
    class UserAuthLogin{
     
    	private $users_login;
    	private $mdp_login;
     
    	function __construct(){
    		if(isset($_POST['users']) || isset($_POST['cryptpass'])){
     
                $this->users_login = $_POST['users'];
    		    $this->mdp_login = sha1($_POST['cryptpass']);
              }
    	}
    	function LoadAuth(){
    		try{
    			$dbh = new PDO('mysql:host=localhost;dbname=madb','root','******');
    			$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    			$stmt = $dbh->prepare("SELECT DISTINCT id_user,users from member where :users and :cryptpass");
    		    $stmt->bindParam(':users',$this->users_login,PDO::PARAM_STR);
    		    $stmt->bindParam(':cryptpass', $this->mdp_login,PDO::PARAM_STR);
    			$stmt->setFetchMode(PDO::FETCH_ASSOC);
    			$stmt->execute();
    			$result = $stmt->fetchAll();
    		}
    		return $result;
    	}
    	function AuthSession(){
    		if (isset($this->users_login)) {
    			$this->LoadAuth();
    			$_SESSION['userid'] = $this->users_login;
    			$_SESSION['username'] = $this->mdp_login;
    			header($page);
    		}
    	}
    }
    faudrait tester avec isset si le login/mdp existe avant de l'affecter à une variable
    Heuu j'ai pas saisi lol, en fait ce sera AuthSession qui sera retourné ou plus précisement assigner a smarty.
    Pas de catch je teste ma connexion a la db a quel niveau
    Au fait pourquoi $_REQUEST est déprécié ? je l'utilise au boulot (pas le choix) comme on est une dizaine de développeur le code est partagé (on me donne que des $REQUEST .

  4. #4
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Je sais pas si $_REQUEST est déprécié mais en tout cas quand tu utilise $_REQUEST tu ne sait pas d'où viennent les données. Est-ce qu'elles viennent d'un POST, d'un GET, d'un Cookie ? Donc il faut prendre l'habitude d'utiliser les bonnes variable globale.

    Pour le catch, il faut le faire tout simplement en dehors de ta classe. Tu lance les exceptions avec throw ou met des bloc try dans ta classe et tu les récupère en dehors de la classe. C'est pas à toi de décider si oui ou non tu veux capturer les erreurs. C'est à celui qui utilise ta classe (bon ici c'est toi dans les 2 cas mais ça change rien).

    Pour le isset t'a bien fait ça. Il faut s'assurer que le $_POST['users'] et l'autre variable $_POST sont bien initialisée sinon tu aura un notice il me semble.

    Je te conseille de mettre un error_reporting(E_ALL | E_STRICT) en début de ton script, juste pendant la phase de création/test/degugging.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    Tu lance les exceptions avec throw ou met des bloc try dans ta classe et tu les récupère en dehors de la classe.
    Vous n'auriez pas un exemple , j'ai fais ceci après le try :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    catch(Exception $e) {
    				throw $e;
    		}
    Ensuite pensez vous qu'un simple assign avec smarty fera l'affaire pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['users'] et $_POST['cryptpass']
    et lancez le script.
    Il faut que je fasse tourner ce script afin de voir si les données sont bien traité ensuite je rajouterai de quoi sécuriser un peux mieux le script, quelques conseil sur ce point serai très apprécié.
    très gentil de votre part de me donner un coup de main

  6. #6
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Je n'ai jamais utiliser smarty donc je ne sait pas s'il fera l'affaire mais niveau sécurité ce qu'il faut faire en gros :
    - se protéger des injection sql (PDO avec requête préparée ou mysql_real_escape_string)
    - se protégé des attaque cross script scripting en parsant l'affichage des donnés (au cas ou tu afficherais le login sur la page, il faut faire attention que le login ne contienne pas de code javascript ect) avec htmlentities().
    - ne jamais faire confiance à des donnée post, get, provenant d'un formulaire, cookies, ... car elles peuvent êtres toute modifiée comme bon nous semble

    Niveau try/catch/throw :
    La classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class MaClasse
    {
        public function __construct()
        {
            if (false) throw new Exception('Pas bon du tout !');
        }
    }
    L'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    try
    {
        $obj = new MaClasse();
    }
    catch(Exception $e)
    {
    	echo $e->getMessage();
    }
    ...
    Bon, l'exemple est complètement débile mais ca illustre assez bien
    Tu peux mettre des try dans la classe il n'y a pas de souci de ce coté.

    Le throw sert à lancer une exception.

    Tu devrais lire quelque article sur les exception pour mieux comprendre, commence par ici peut être : http://be.php.net/manual/fr/language.exceptions.php

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

Discussions similaires

  1. [Cookies] Durée de connexion
    Par namstou3 dans le forum Langage
    Réponses: 3
    Dernier message: 02/10/2007, 15h00
  2. pb de creation de classe de connexion
    Par oceane751 dans le forum JDBC
    Réponses: 2
    Dernier message: 30/07/2007, 15h37
  3. Réponses: 6
    Dernier message: 03/07/2007, 19h29
  4. [MySQL] Classe database + connexion multiple + principe mal compris
    Par Rodrigue dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/08/2006, 14h06
  5. Petit souci JSP et class de connexion a BdD
    Par LeXo dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 07/06/2006, 00h57

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