Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/07/2007, 12h06   #1
Invité régulier
 
Inscription : février 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 25
Points : 9
Points : 9
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 :
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
coachllb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 16h41   #2
Membre éclairé
 
Avatar de nicocsgamer
 
Inscription : mars 2005
Messages : 324
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Luxembourg

Informations forums :
Inscription : mars 2005
Messages : 324
Points : 365
Points : 365
Envoyer un message via MSN à nicocsgamer
Regarde cette article sur les sessions.
nicocsgamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 17h12   #3
Invité régulier
 
Inscription : février 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 25
Points : 9
Points : 9
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...
coachllb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 18h39   #4
Invité régulier
 
Inscription : février 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 25
Points : 9
Points : 9
j'ai modifié mon code et j'ai crée une classe auth contenant ce code :
Code :
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 :
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
coachllb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h35.


 
 
 
 
Partenaires

Hébergement Web