135 votes

Quel est le meilleur moyen d'empêcher le détournement de session ?

Cela concerne plus particulièrement l'utilisation d'un cookie de session client pour identifier une session sur le serveur.

La meilleure solution consiste-t-elle à utiliser le cryptage SSL/HTTPS pour l'ensemble du site web, ce qui vous donne la meilleure garantie qu'aucune attaque de type "man in the middle" ne sera en mesure de renifler un cookie de session client existant ?

Et peut-être la deuxième meilleure solution est-elle d'utiliser une sorte de cryptage de la valeur de session elle-même qui est stockée dans votre cookie de session ?

Si un utilisateur malveillant a un accès physique à une machine, il peut toujours consulter le système de fichiers pour récupérer un cookie de session valide et l'utiliser pour détourner une session ?

0voto

Julio César Points 3007

Pour réduire le risque, vous pouvez également associer l'IP d'origine à la session. Ainsi, un attaquant doit se trouver dans le même réseau privé pour pouvoir utiliser la session.

La vérification des en-têtes de référence peut également être une option, mais ceux-ci sont plus facilement usurpés.

7 votes

Non, vous ne pouvez pas utiliser l'IP d'origine, car elle peut changer - soit par des IP dynamiques, modifiées lorsqu'un utilisateur est temporairement déconnecté, soit par l'utilisation (implicite ou explicite) d'une ferme de proxy. De plus, les pirates de session provenant du même ISP peuvent utiliser le même proxy et la même IP qu'un utilisateur légitime...

1 votes

PHP-Nuke a une bonne page sur leur approche de la session, et ils expliquent en détail comment la connexion à l'IP ne fonctionne pas avec tous les FAI. phpnuke.org/

4 votes

Le changement d'adresse IP est très courant chez les fournisseurs d'accès Internet mobile. Avec Vodafone, mon IP change à CHAQUE demande.

0voto

NetDiver Points 29

Utilisez uniquement SSL et, au lieu de crypter le HTTP_USER_AGENT dans l'identifiant de session et de le vérifier à chaque demande, stockez simplement la chaîne HTTP_USER_AGENT dans votre BD de session également.

Maintenant, vous n'avez qu'une simple chaîne basée sur le serveur à comparer avec l'ENV 'HTTP_USER_AGENT'.

Vous pouvez aussi ajouter une certaine variation dans votre comparaison de chaînes pour être plus robuste face aux mises à jour des versions des navigateurs. Et vous pouvez rejeter certains identifiants HTTP_USER_AGENT. (les vides par exemple) Cela ne résout pas complètement le problème, mais ajoute au moins un peu plus de complexité.

Une autre méthode pourrait consister à utiliser des techniques plus sophistiquées d'empreinte digitale du navigateur, à combiner ces valeurs avec le HTTP_USER_AGENT et à envoyer ces valeurs de temps en temps dans un en-tête séparé. Mais vous devriez alors crypter les données dans l'identifiant de session lui-même.

Mais cela rend le processus beaucoup plus complexe et augmente l'utilisation du CPU pour le décryptage à chaque demande.

0voto

Shaoquan Points 10

Si le FAI détourne la vérification du certificat, il peut lancer une attaque de type Man-in-the-Middle. Surtout avec une autorité de certification compromise.

Je pense donc que vous ne pouvez pas empêcher le détournement de session par le FAI. Surtout lorsque les forces de l'ordre arrivent avec un faux certificat obtenu auprès d'une autorité de certification sous contrôle judiciaire.

Vous aurez besoin d'un élément extérieur au réseau pour protéger votre session, par exemple un tampon à usage unique. C'est pourquoi le One Time Pad est si sensible et ne peut être vendu que par quelques entreprises.

Attention, le one time pad peut être exploité. Choisissez votre pavé numérique avec professionnalisme.

0 votes

À propos de la sécurité de l'OTP, veuillez chercher sur Google "crypto ag swiss".

-15voto

Nima Points 19

Protéger par :

$ip=$_SERVER['REMOTE_ADDER'];
$_SESSEION['ip']=$ip;

13 votes

Je ne vois pas ce que vous faites ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X