rportal Posté 26 Avril 2006 Posté 26 Avril 2006 Bonjour, j'ai un script qui me permet de controler les sessions des utilisateurs qui visitent mes sites. Je me base sur un certain nombe de paramètres pour valider que la session est bien celle de l'utilisateur. Un de ces paramètres est l'adresse IP du client. Si cette adresse IP change pour une même session, je considère qu'il y a tentative de vol de session et je réinitialise la session. Mon problème est le suivant: quand on se trouve derrière un proxy pour se connecter au net (le cas en général dans une entreprise), ce proxy peut utiliser du laod balancing avec plusieurs IP (donc plusieurs machine) pour se connecter au net. Du coup l'adresse IP du client peut changer... Mon système d'identification réinitialise alors les sessions... Donc pas top, on est connecté dans la zone privée et 30s plus tard on se fait jeter. Ma question est la suivante: dois je garder le controle d'IP et le coupler avec autre chose (dans ce cas quoi?) ? ou dois je abandonner le controle d'IP et reduire le niveau de securite?
kot Posté 26 Avril 2006 Posté 26 Avril 2006 J'ai eu un problème un peu équivalent. Certains abonnés ADSL se trouvaient jeté de ma boutique en ligne car ils changaient d'adresse IP pendant le temps de l'achat. Perso, j'ai abandonné l'identification basée sur l'IP.
Harry_20 Posté 26 Avril 2006 Posté 26 Avril 2006 J'ai aussi pensé à ce problème pour mon site. Je pencherais pour une solution intermédiaire : placer une option dans la session (et la base de données forcément) qui permette à l'utilisateur de décocher le contrôle IP en cas de déconnexion fréquente. Par défaut le contrôle est activé. Qu'en pensez-vous ?
kot Posté 26 Avril 2006 Posté 26 Avril 2006 Une sécurité que l'utilisateur peut désactiver ... Honnêtement, je ne vois pas l'intérêt... Qu'est-ce qui empêche un éventuel hacker de supprimer la détection. Comment justifier que l'on déconnecte un internaute?
rportal Posté 26 Avril 2006 Auteur Posté 26 Avril 2006 Une idee: utiliser le http_referer, celui-ci doit forcement appartenir au site... Du coup si l'ip change, on verifie que l'utilisateur vient du site... Le probleme se pose alors quand le http_referer n'est pas dispo, mais est ce frequent?
Dan Posté 26 Avril 2006 Posté 26 Avril 2006 Je pense que dans ce cas il faut s'intéresser plutôt aux variables d'environnement telles que: HTTP_FORWARDEDHTTP_X_FORWARDED_FORHTTP_CLIENT_IPHTTP_VIAHTTP_XROXY_CONNECTIONHTTP_PROXY_CONNECTION Elles sont faites pour déterminer si le client est derrière un proxy. Dan
rportal Posté 26 Avril 2006 Auteur Posté 26 Avril 2006 Et oui un RTFM de temps en temps ca fait du bien. Merci Dan je vais tester tout ca.
rportal Posté 26 Avril 2006 Auteur Posté 26 Avril 2006 Bon je n'arrive pas à récuperer ces données (utilisation de getenv et $_SERVER)... d'autres idées?
kot Posté 26 Avril 2006 Posté 26 Avril 2006 Dan, C'est une utilisatrice AOL qui avait une IP changeante. Tu crois qu'ils sont déclarés comme étant derrière un proxy?
glibre Posté 26 Avril 2006 Posté 26 Avril 2006 Dan, C'est une utilisatrice AOL qui avait une IP changeante. Tu crois qu'ils sont déclarés comme étant derrière un proxy? <{POST_SNAPBACK}> il me semble qu'AOL travaille bien sur des solutions de proxying
Anonymus Posté 26 Avril 2006 Posté 26 Avril 2006 Pour AOL, il faut systématiquement prendre en compte le fait que l'IP change, et peut même changer en cours de connexion. AOL gère ses IP en interne, non par rapport à l'internaute, mais par rapport au nombre total d'IP qu'ils ont à disposition.
Dan Posté 26 Avril 2006 Posté 26 Avril 2006 En toute logique pour les clients d'AOL, tu as HTTP_CLIENT_IP qui devrait rester constant, même si l'IP apparente change. Ceci devrait fonctionner: <?phpfunction get_ip(){ if (getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } elseif(getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); } else { $ip = getenv("REMOTE_ADDR"); } return $ip;}?>
kot Posté 26 Avril 2006 Posté 26 Avril 2006 C'est quoi la différence entre une IP apparente et l'HTTP_CLIENT_IP?
Giboo Posté 13 Juin 2006 Posté 13 Juin 2006 Bonjour, j'ai pu voir sur les différents sujets portant sur la même question le remède contre la perte de session derrière un proxy de load balancing genre AOL... malheureusement, ma mise en oeuvre ne marche pas. selon les recommandations de AOL en la matière je n'utilise plus le cookie automatique PHPSESSID, mais je crée mon propre identifiant de session, dans un cookie, que je propage et récupère à chaque page : if (!isset($_COOKIE['maSession'])) { // Si cookie d'ID absent -> nouvelle ID de session srand ((float) microtime() * 9999999); $user_ip = rand(0,9999999); $idSession = md5($user_ip.time()); session_name("maSession"); session_id($idSession); session_start();} else { session_name("maSession"); session_id($_COOKIE['info']); session_start();}// (re)écriture du cookie d'id sessionsetcookie('maSession',session_id(),time()+12800,"/", ".monDomaine.com",0); Quand mon panier est vide, je vérifie aussi que le client accepte les cookies, avec un petit code dans une iframe : Le client les accepte, la police de confidentialité est bien définie. Mais voilà, le navigateur AOL (ou son émulation en me branchant sur le proxy d'aol dans firefox) ne veut rien entendre : ma session est perdue ! Je ne vois plus quoi faire, ça fais 3 jours que je cherche en vain... Merci de votre aide. Bien cordialement, Giboo
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant