07-12-2008, 01:40 AM
(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;