start - variable de session php




Comment fonctionne le détournement de session en PHP? (2)

J'ai créé un site Web avec inscription / connexion. Je peux voir le cookie PHPSESSID dans les outils de développement de Chrome, alors je me demande comment utiliser cette valeur d'ID de session pour pirater le compte que je suis connecté, disons un navigateur différent, par souci de simplicité.

Un site Web sécurisé devrait-il pouvoir déterminer si cette session a été détournée et l’empêcher?

En outre, comment se fait-il que d’autres grands sites utilisant PHP (par exemple, Facebook) n’aient pas de cookies PHPSESSID? Ont-ils un nom différent pour l'obscurité ou utilisent-ils simplement un mécanisme différent?


Beaucoup de bonnes questions et bon pour vous de leur demander.

Tout d'abord, une session n'est qu'un cookie. Une «session» ne fait pas partie de la pile HTTP. PHP arrive juste à fournir quelques commodités qui facilitent le travail avec les cookies, introduisant ainsi des sessions. PHP choisit PHPSESSID comme nom par défaut pour le cookie, mais vous pouvez choisir ce que vous voulez. Même en PHP, vous pouvez changer le nom de la session.

Tout ce qu'un attaquant doit faire est de récupérer le cookie de session que vous consultez et de l'utiliser dans son propre navigateur. L'attaquant peut le faire avec des scripts automatisés ou, par exemple, en utilisant Firebug, vous pouvez simplement modifier les valeurs de cookie actuelles.

Alors oui, si j'ai votre identifiant. Je peux voler votre session si vous n'avez rien fait pour l'empêcher.

Cependant, le plus difficile pour un attaquant est d'obtenir le cookie en premier lieu. L'attaquant ne peut pas vraiment faire cela, à moins que:

  • Ils ont accès à votre ordinateur
  • Ils peuvent en quelque sorte capturer votre trafic réseau.

La première partie est difficile à résoudre. Il y a quelques astuces pour identifier l'ordinateur qui a démarré la session (vérifiez si l'agent utilisateur a changé, vérifiez si l'adresse IP a changé), mais les solutions ne sont pas étanches.

Vous pouvez réparer le second en vous assurant que tout votre trafic est crypté à l'aide de HTTPS. Il y a très peu de raisons de ne pas utiliser HTTPS. Si vous avez une zone "connectée" sur votre site, utilisez SSL!

J'espère que ce genre de réponse répond à votre question. Quelques autres conseils auxquels j'ai pensé tout de suite:

  • Chaque fois qu'un utilisateur se connecte, donnez-lui un nouvel identifiant de session
  • Chaque fois qu'un utilisateur se déconnecte, donnez-lui également un nouvel identifiant de session!
  • Assurez-vous que le navigateur ne peut en aucun cas déterminer la valeur du cookie de session. Si vous ne reconnaissez pas le cookie, régénérez-en un nouveau!

Quelqu'un renifle le cookie d'ID de session et le configure pour une demande ultérieure. Si c'est la seule chose qui a authentifié un utilisateur, ils sont connectés.

La plupart des sites utiliseront une authentification basée sur des cookies sous une forme quelconque. Il existe plusieurs manières de rendre cela plus sûr, comme le stockage d'informations sur le navigateur de l'utilisateur lorsqu'il se connecte (par exemple, agent utilisateur, adresse IP). Si quelqu'un d'autre tente naïvement de copier le cookie, cela ne fonctionnera pas. (Bien sûr, il existe également des moyens de contourner cela.) Vous verrez également des cookies de session régénérés périodiquement pour vous assurer qu'ils ne sont pas valides pendant une période particulièrement longue.

Découvrez Firesheep pour une extension Firefox qui effectue le détournement de session. Je ne vous suggère pas de l'utiliser, mais vous pouvez trouver la discussion intéressante sur cette page.







cookies