07-12-2008, 09:12 AM
(07-12-2008, 01:40 AM)Anthor a écrit :(03-12-2008, 04:41 PM)Zamentur a écrit : IMPORTANTIl ne faut surtout pas le faire après chaque session_start(), ce qui correspond à renvoyer un nouveau cookie à chaque requête http, pour renouveler l'identifiant, ce qui est très lourd.
Enfin un trucs concernant les sessions, il est primordial lors de l'appel à session_start d'utiliser session_regenerate_id afin d'eviter qu'un utilisateur ne se fasse imposer son numero de session.
Ce qui serait l'équivalent d'un vol de' session, et malheureusement beaucoup d'application sont vulnérable à cette faille!
Par contre il faut effectivement régénérer l'identifiant à chaque connexion d'un membre, pour déconnecter tout autre personne susceptible d'être connecté.
Pour simplement éviter une même session entre deux navigateurs différents, et donc un éventuel vol de session, il suffit simplement d'enregistrer le navigateur entre 2 requêtes :
Code PHP :<?php
session_start();
$clientHeaders = $_SERVER['HTTP_USER_AGENT'];
if( array_key_exists('HTTP_ACCEPT', $_SERVER) )
$clientHeaders .= $_SERVER['HTTP_ACCEPT'];
$clientHeaders = md5($clientHeaders);
// Si utilisateur connecté
if( isConnect() && $_SESSION['clientBrowser'] != $clientHeaders )
{
session_regenerate_id();
session_destroy();
header("HTTP/1.0 403 Forbidden" );
exit();
}
$_SESSION['clientBrowser'] = $clientHeaders;
Puisque lors du login sur le second navigateur, c'est une nouvelle session qui est créée. Donc modifier checker clientBrowser serait inefficace. De plus, certains navigateurs permettent une double session.