Magazine High tech

CwsSession : Protéger les sessions PHP et les stocker en base de données

Publié le 23 septembre 2013 par Cr@zy @crazyws

CwsSession : Protéger les sessions PHP et les stocker en base de données

Bonjour à tous!

En ce moment je n'ai pas le temps de rédiger des articles mais rassurez-vous, ça devrait redémarrer dés le mois prochain

;)

En attendant je vous propose ici une nouvelle classe PHP permettant de gérer les sessions utilisateurs et de les stocker de façon sécurisée en base de données.
Cette classe se chargera également de chiffrer les données de session qui seront ajoutées en base de données avec la méthode PBKDF2 via la classe PHP CwsCrypto.

Grâce à l'utilisation des sessions, l'identité du visiteur est maintenue à travers votre application mais comme toujours, il faut prêter attention au vol d'identité (identity theft).

La principale chose dont a besoin un pirate est de voler l'identifiant de session. Il y a trois façons classiques d'attaquer une session :

  • Sniffer l'identifiant : La plupart des handlers de session générent des IDs qui rendent cela quasiment impossible.
  • Voler l'identifiant : En utilisant un malware, en sniffant le réseau ou bien en utilisant des exploits Javascript, des pirates peut récupérer la valeur du cookie de session.
  • Définir l'identifiant : Plutôt que de voler l'ID, certains pirates essaieront de définir une valeur de leur choix.

La configuration par défaut d'une session n'est pas très sécurisée et c'est pour cela que je vous propose la classe PHP CwsSession qui est en quelque sorte un wrapper pour gérer vos sessions.

Cette classe requiert :

  • Une version de PHP >= 5.1.5
  • Une base de données (par exemple MySQL)
  • La classe PHP CwsCrypto

Dans cette classe je me sers de la fonction session_set_save_handler() qui me permet de redéfinir les fonctions de stockage, de lecture, d'écriture, etc... des sessions.

Désormais pour stocker les sessions, je me servirais de la base de données avec une table dédiée aux sessions avec cette structure :

CREATE TABLE IF NOT EXISTS `sessions` (
  `id` varchar(128) NOT NULL,
  `id_user` int(10) unsigned NOT NULL DEFAULT '0',
  `expire` int(10) unsigned NOT NULL DEFAULT '0',
  `data` text NOT NULL,
  `skey` varchar(128) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Vous pouvez si vous le souhaitez, changer le nom de la table (ici sessions) mais ne changez pas le nom des colonnes.

En ce qui concerne les fingerprints (empreintes), il y a deux méthodes. La première se base sur le user agent et la seconde sur le user agent et l'adresse IP du visiteur. Attention à cette deuxième méthode car certains fournisseurs d'accès fournissent plusieurs adresses IPs.

Pour la suite je vous invite à lire le README sur GitHub.

CwsSession : Protéger les sessions PHP et les stocker en base de données

Vous pouvez télécharger gratuitement la classe PHP CwsSession sur GitHub. Si vous rencontrez des problèmes ou si avez des idées d'améliorations, merci de poster une issue sur GitHub.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Cr@zy 408 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte