01-02-2010, 09:43 AM
Pour répondre à ta question, le plus simple est de détailler le principe des sessions (Et comme ça, tu comprendras que non, ce n'est pas sécurisé contre le vol de session, mais c'est plus ou moins impossible à sécuriser).
Donc, une session, c'est quoi ? C'est un moyen de transférer des informations d'une page à une autre. Quelques rappels pour commencer : lorsqu'on navigue sur internet, on utilise le protocole HTTP. Ce protocole n'est pas authentifié : cela signifie que pour le serveur, et donc pour PHP, il n'y a aucun moyen de savoir, lorsqu'un visiteur charge une page, puis une autre, qu'il s'agit du même visiteur et pas de deux visiteurs différents qui auraient successivement chargé deux pages différentes.
Le principe des sessions va être de remédier à ce problème, en enregistrant une caractéristiques chez le visiteur, qui sera transmise de page en page et donc permettra de "reconnaitre" le visiteur d'une page à l'autre. PHP réalise cela en enregistrant un cookie (donc un fichier texte) sur l'ordinateur du client, et en le lisant à chaque page ; ce fichier contient un nombre (l'identifiant de session) qui est associé à un autre fichier texte, celui-ci stocké coté serveur. Ainsi, il n'y a que ce nombre qui est sur l'ordinateur du client, les autres informations (login et password dans ton cas) sont "sûres" puisque sur le serveur.
Maintenant, le vol de session, qu'est-ce que c'est ? Et bien, cela consiste d'abord à récupérer un identifiant de session appartenant à une autre personne (de préférence un administrateur). Cela peut être réalisé, par exemple, si il est possible d'executer du code javascript sur le site : dans ce cas, on place un code javascript qui lit le cookie écrit par php (rappel : les cookies sont lisibles par n'importe quelle méthode tant qu'on est sur le même site), et qui charge une image sur un serveur contrôlé par le pirate. Laquelle image aura en paramètre get (?id=XXXX) l'identifiant et sera générée par php, avec un enregistrement.
La seconde étape consiste à modifier le cookie pour remplacer notre propre id de session par celui que l'on a intercepté. Des extensions firefox font ça très bien, j'utilise firecookie pour ma part, qui s'intègre à firebug. Et ainsi, lorsqu'on va actualiser la page, le serveur va voir un ID de session sur notre cookie, lire les informations de session correspondantes, considérer que nous sommes l'administrateur, et hop ! Ca fait des chocapic (ou des problèmes, c'est selon).
Alors, comment s'en protéger ? Et bien, il n'y a pas de méthode miracle. A mon avis, la manière la plus simple de faire consiste à empêcher le vol de l'id à la base, plutôt qu'à chercher à empecher qu'il soit modifier, puisque c'est impossible (par définition, l'id de session doit être sur le pc du client, et tout ce qui est sur le pc du client est modifiable et falsifiable). Ca implique à la fois une sécurisation de ton code contre les attaques XSS, et une sécurisation de ta façon d'agir (la tienne et celle de tes administrateurs) pour ne pas utiliser leur compte administrateur dans un endroit à risque (typiquement, les cyber-cafés ou les accès de fac peuvent facilement être espionnés).
PS : Si tu veux t'entrainer de façon légale au piratage, fais un tour sur Hack This Site. C'est un site tout ce qu'il y a de plus légal qui propose des challenges et des missions sur des mini-sites créés par le propriétaire de HTS et pour ce but, et qui contiennent tous une faille de sécurité. Ca permet d'en apprendre beaucoup, par la pratique !
Donc, une session, c'est quoi ? C'est un moyen de transférer des informations d'une page à une autre. Quelques rappels pour commencer : lorsqu'on navigue sur internet, on utilise le protocole HTTP. Ce protocole n'est pas authentifié : cela signifie que pour le serveur, et donc pour PHP, il n'y a aucun moyen de savoir, lorsqu'un visiteur charge une page, puis une autre, qu'il s'agit du même visiteur et pas de deux visiteurs différents qui auraient successivement chargé deux pages différentes.
Le principe des sessions va être de remédier à ce problème, en enregistrant une caractéristiques chez le visiteur, qui sera transmise de page en page et donc permettra de "reconnaitre" le visiteur d'une page à l'autre. PHP réalise cela en enregistrant un cookie (donc un fichier texte) sur l'ordinateur du client, et en le lisant à chaque page ; ce fichier contient un nombre (l'identifiant de session) qui est associé à un autre fichier texte, celui-ci stocké coté serveur. Ainsi, il n'y a que ce nombre qui est sur l'ordinateur du client, les autres informations (login et password dans ton cas) sont "sûres" puisque sur le serveur.
Maintenant, le vol de session, qu'est-ce que c'est ? Et bien, cela consiste d'abord à récupérer un identifiant de session appartenant à une autre personne (de préférence un administrateur). Cela peut être réalisé, par exemple, si il est possible d'executer du code javascript sur le site : dans ce cas, on place un code javascript qui lit le cookie écrit par php (rappel : les cookies sont lisibles par n'importe quelle méthode tant qu'on est sur le même site), et qui charge une image sur un serveur contrôlé par le pirate. Laquelle image aura en paramètre get (?id=XXXX) l'identifiant et sera générée par php, avec un enregistrement.
La seconde étape consiste à modifier le cookie pour remplacer notre propre id de session par celui que l'on a intercepté. Des extensions firefox font ça très bien, j'utilise firecookie pour ma part, qui s'intègre à firebug. Et ainsi, lorsqu'on va actualiser la page, le serveur va voir un ID de session sur notre cookie, lire les informations de session correspondantes, considérer que nous sommes l'administrateur, et hop ! Ca fait des chocapic (ou des problèmes, c'est selon).
Alors, comment s'en protéger ? Et bien, il n'y a pas de méthode miracle. A mon avis, la manière la plus simple de faire consiste à empêcher le vol de l'id à la base, plutôt qu'à chercher à empecher qu'il soit modifier, puisque c'est impossible (par définition, l'id de session doit être sur le pc du client, et tout ce qui est sur le pc du client est modifiable et falsifiable). Ca implique à la fois une sécurisation de ton code contre les attaques XSS, et une sécurisation de ta façon d'agir (la tienne et celle de tes administrateurs) pour ne pas utiliser leur compte administrateur dans un endroit à risque (typiquement, les cyber-cafés ou les accès de fac peuvent facilement être espionnés).
PS : Si tu veux t'entrainer de façon légale au piratage, fais un tour sur Hack This Site. C'est un site tout ce qu'il y a de plus légal qui propose des challenges et des missions sur des mini-sites créés par le propriétaire de HTS et pour ce but, et qui contiennent tous une faille de sécurité. Ca permet d'en apprendre beaucoup, par la pratique !