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] Authentification, votre avis


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 32
    Points : 22
    Points
    22
    Par défaut [Cookies] Authentification, votre avis
    Bonjour,
    je refais mon site web (à la main, sans cms cette fois ci) afin de progresser encore dans php.
    Après avoir lu différents articles et posts (par exemple sur le vol de session), et vu différentes sources, je me suis crée ce petit script :
    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
    class auth {
    	var $connect;
     
    	function __construct() {
    		$db=DB_NAME;
     	 	$host=DB_HOST;
     	 	$passwd=DB_PASSWD;
     	 	$user=DB_USER;
     	 	$this->connect=new mysqli($host,$user,$passwd,$db);
     	 	if (mysqli_connect_errno()) {
     	 		throw new Exception ('Erreur : ne peut se connecter à  la base de donnée. Merci de réessayer plus tard.');
     	 	}
    	}
     
    	function ProtectVar($chaine){
    		$chaine=$this->connect->real_escape_string(trim($chaine));
    		return $chaine;
    	}
    	/*
    	 * fonction qui vérifie le pseudo et le mot de passe entré
    	 * s'ils correspondent bien
    	 * @param string $pseudo
    	 * @param string $passwd
    	 */
    	function Login($pseudo,$passwd) {
    		if (empty($pseudo) || empty($passwd)){
    			throw new Exception('Les champs pseudo ou password sont vides.');
    		}
    		$pseudo=$this->ProtectVar($pseudo);
    		$passwd=$this->ProtectVar($passwd);
    		$passwd=sha1('bast'.$passwd);
    		$query="select * from membres where pseudo='$pseudo' and passwd='$passwd'";	
    		$result=$this->connect->query($query);
    		if (!$result) {
    			throw new Exception('L\'identification a échoué.');
    		}	
    		//on vérifie que le compte soit activé
    		if ($result->num_rows=='1'){
    			$row=$result->fetch_row();
    			if ($row['1']=='0') {
    				throw new Exception('Votre compte n\'est pas encore activé.');
    			} 
    		} else {
    			throw new Exception('L\'identification a échoué.');
    		}
    		session_start();
    		if ($_SESSION['pseudo']) {
    			unset ($_SESSION['pseudo']);
    			session_destroy();
    		}
    		session_regenerate_id(true);
    		$_SESSION['pseudo']=$pseudo;
    		$_SESSION['niveau']=$row['6'];
    		$_SESSION['dateacces']=time();
    	}
     
    	/*
    	 * fonction à mettre en tete de chaque page
    	 * elle vérifie qu'un utilisateur est connecté
    	 */
    	function EstConnecte() {
    		session_start();
    		regenerate_id(true);
    		if (isset($_SESSION['pseudo']) && isset($_SESSION['niveau']) && isset($_SESSION['dateacces']) && $_SESSION['dateacces']+600<time()) {
                           $_SESSION['dateacces']=time();
    		       return true;
    		} else {
    			return false;
    		}
    	}
     
    }
    la fonction login permet de valider lma connexion d'un nouvel utilisateur
    la fonction estconnecte permet de savoir si quelqu'un est connecté ?

    Puis-je avoir votre avis ?
    Est ce suffisant niveau sécurité ?

    J'avais pensé récupérer le niveau du membre à chaque fois par une connexion à la base. Mais ça n'apporte rien en sécurité car si quelqu'un vole $_SESSION['pseudo'] il obtiendra de toute façon le niveau stocké dans la base.

    Dois-je aussi stocker la date d'accès et par exemple un ticket (nb aléatoire dans la base + dans un cookie) et faire une vérif à chaque chargement de pages ?

    Je vous remercie

  2. #2
    Membre averti Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Points : 342
    Points
    342
    Par défaut
    Regarde cette article sur les sessions.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    Je te remercie. J'avais déjà lu cet article ainsi que celui sur les vols de sessions sur developpez.com.

    C'est dans cette optique que je voulais utiliser un système de ticket enregistré dans la session mais aussi dans un cookie.
    Mais si les cookies sont désactivé chez le client ?
    Alors peut être stocké ce ticket dans une base de données...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    j'ai modifié mon code et j'ai crée une classe auth contenant ce code :
    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
     
    	function VerifTicket(){
    		if ($_COOKIE['ticket']==$_SESSION['ticket']) {
    			$ticket = uniqid(strval(mt_rand(1, 999999)));
    			$_SESSION['ticket']=$ticket;
    			setcookie('ticket',$ticket);
    			return true;
    		} else {
    			$message='A la suite de vérifications pour la sécurité <br />';
    			$message.='il y a eu problème avec votre session. Veuillez vous reconnecter.';
    			throw new Exception($message);
    		}
    	}
     
    	/*
    	 * fonction à mettre en tete de chaque page
    	 * elle vérifie qu'un utilisateur est connecté
    	 */
    	function EstConnecte() {
    		session_start();
    		$ticket=$this->VerifTicket();
    		if ($ticket) {
    			if (isset($_SESSION['pseudo']) && isset($_SESSION['niveau']) && isset($_SESSION['dateacces']) && $_SESSION['dateacces']+600<time()) {
    				$_SESSION['dateacces']=time();
    				return true;
    			} else {
    				return false;
    			}
    		}
    	}
    En entete de chaque page je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $auth=new auth();
    $auth->EstConnecte();
    Lorsque j'appele différentes pages qui se trouve dans le repertoire sequences, tout va bien.
    Par contre lorsque je change de répertoire et que j'appelle par exemple index.php dans le repertoire article je tombe sur l'exception levée par EstConnecte()

    Je ne trouve pas le pb

Discussions similaires

  1. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 23h00
  2. Qui se sert de Together ici ? votre avis ?
    Par Matthieu Brucher dans le forum Autres
    Réponses: 28
    Dernier message: 25/08/2006, 10h44
  3. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 22h48
  4. [Débat] Votre avis sur la section "Dev Web"
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 31
    Dernier message: 03/03/2004, 21h55
  5. Réponses: 4
    Dernier message: 22/05/2003, 12h15

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