PHP et les sessions : durée de vie, utilisation avancée et quelques subtilités (1) Sécuriser les identifiants de session

Plusieurs techniques permettent d'obenir un identifiant de session

 

Fondamentalement, l'implémentation des sessions en PHP ne souffre pas de problèmes de sécurité, mais vous devrez néanmoins veiller à la manière dont vous les utiliserez. En effet, dans la mesure où une session est basée sur un identifiant transmis sur Internet entre l'utilisateur et le serveur, cette donnée est très sensible. Si une personne mal intentionnée obtient l'identifiant de session d'un autre utilisateur, il devient assez facile d'usurper son identité.

Il existe plusieurs techniques (simples ou plus compliquées) permettant d'obtenir l'identifiant de session d'un utilisateur :

 la capture : c'est simplement le vol de l'identifiant en le lisant chez l'utilisateur (risque qui doit être contrôlé par l'utilisateur),
 la divination : l'identifiant est deviné par la personne mal intentionnée (pratiquement impossible),
 la fixation : le pirate choisit et force l'identifiant de la session (que l'on peut éviter simplement).

 

Nécessité de sécuriser l'identifiant de session

 

D'une manière générale, on évitera de transmettre l'identifiant de session dans l'URL par sécurité (pour prévenir de la fixation). D'ailleurs, c'est assez mauvais pour le référencement. Ce comportement peut être désactivé avec la directive session.use_only_cookies à vrai. Bien entendu, un utilisateur interdisant l'utilisation des cookies ne pourra pas utiliser les sessions.

Par défaut, les données de sessions de PHP sont stockées dans un simple fichier de texte

Dans tous les cas, quand le niveau de sensibilité d'une session est modifié (par exemple, quand l'utilisateur s'authentifie ou qu'il obtient de nouveaux droits d'accès), une bonne pratique consiste à générer de nouveau cet identifiant de session avec session_regenerate_id().

Par défaut, les données de sessions de PHP sont stockées dans un simple fichier de texte (dans le répertoire /tmp sous linux). Tous les scripts PHP peuvent lire ces fichiers car toute exécution de PHP est réalisée par un même utilisateur (à moins que le safe_mode soit activé). Sur un hébergeur mutualisé, il est peut-être plus prudent de stocker les données de sessions dans une base de données. Consultez la documentation de la fonction session_set_save_handler() pour en savoir plus sur la personnalisation de la gestion du stockage des données de sessions.