Le protocole HTTP crée une session pour retenir certaines informations concernant l’utilisateur lors de la navigation. Celle-ci peut être la cible d'attaques pour pouvoir usurper l'identité du visiteur connecté et se faire passer pour lui en lui "volant" sa session.
Dans un site programmé en PHP, tous les utilisateurs sont vulnérables s'il utilise seulement session_start(). Si le hacker est capable de récupérer l'ID de votre session active, il pourra l'utiliser en l'initialisant par la querystring (page.php?PHPSESSID=identifiant).
Pour contrer cette vulnérabilité, on peut utiliser la fonction built-in de PHP session_regenerate_id() qui génère un nouvel identifiant de session lors de la vérification de l'initialisation.
<?php
session_start();
if( !isset($_SESSION['initialized']) ) {
session_regenerate_id();
$_SESSION['initialized'] = true;
}
if( !isset($_SESSION['initialized']) ) {
session_regenerate_id();
$_SESSION['initialized'] = true;
}
?>
À la fin, assurez-vous aussi de détruire la session, que ce soit par un mécanisme de déconnexion ou par une expiration forcée par le serveur (voir php.ini ou ini_set).
<?php session_destroy(); ?>