Après la lecture du billet de Denis le cybercodeur à propos des cookies et l'accessibilité, .je me vois contraint de faire le point sur le problème que pose le passage des ID de sessions dans les urls.

En effet, cela peut-être un gros trous de sécurité pour le site concerné.

Il faut garder en tête que les urls sont stockées un peu partout.

  • dans l'historique du navigateur : imaginez l'internaute dans un cybercafé, il s'identifie sur un site et l'id est passé dans les urls. L'internaute qui le succède sur la machine à alors facilement accés à sa session, puisqu'il retrouve tout dans l'historique. On peut imaginer que cet internaute mal-veillant puisse également regarder dans les cookies pour récupérer les cookies de sessions. Mais il y a moins de chance d'en retrouver : les cookies de sessions sont automatiquement effacés à la fermeture du navigateur.
  • dans les logs du serveur : Si il est possible de voir sur le site ses statistiques d'accès (générées par exemple par des outils comme awstats ou webalyser), il est alors possible parfois de voir les derniers liens qui ont été parcouru. Donc de voir éventuellement des identifiants de sessions.
  • dans les bookmarks
  • Sur d'autres sites !! Imaginez un internaute qui, sur un forum, veut faire découvrir à tout le monde une page intéressante d'un site qu'il a visité et pour lequel l'identifiant de session est transmis dans l'url, il va donc recopier l'url dans ce forum, et ainsi montrer à tout le monde son identifiant de session !
  • via des attaques de type CSS (à ne pas confondre avec les feuilles de styles :-).

Bref, un internaute malveillant peut avoir divers moyen de récupérer un identifiant de session, et donc de prendre l'identité d'un autre sur un site et faire toutes les actions malveillantes qu'il est possible de faire dans ce cas (vol de données personnelles, destruction du compte, changement des paramètres du compte, du mot de passe etc..).

Bien sûr, coté serveur, il est possible de limiter les dégâts : limiter la durée de vie des sessions aprés un temps d'inactivité, n'autoriser l'utilisation d'une session, qu'à partir de la machine qui a initié la session (en vérifiant l'IP), etc... Mais rien n'est fiable à 100%.

Le mieux est d'interdire le passage de l'id de session dans les urls (session.use_trans_sid à 0 dans le php.ini)

Pour les internautes : ne pas bookmarquer ou transmettre les urls contenant ces identifiants de session (reconnaissable grâce à la presence d'une longue suite de chiffres et lettres), utiliser la fonction "quitter" ou "déconnecter" du site si elle est présente, fermer son navigateur après utilisation, vider l'historique.

Ca limitera les éventuels dégats.