Aller au contenu

Problème d'identification derrière un proxy


Sujets conseillés

Posté

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?

Posté

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.

Posté

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 ? :D

Posté

Une sécurité que l'utilisateur peut désactiver ... :thumbdown:

Honnêtement, je ne vois pas l'intérêt... :unsure:

Qu'est-ce qui empêche un éventuel hacker de supprimer la détection.

Comment justifier que l'on déconnecte un internaute?

Posté

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?

Posté

Je pense que dans ce cas il faut s'intéresser plutôt aux variables d'environnement telles que:

HTTP_FORWARDED
HTTP_X_FORWARDED_FOR
HTTP_CLIENT_IP
HTTP_VIA
HTTP_XROXY_CONNECTION
HTTP_PROXY_CONNECTION

Elles sont faites pour déterminer si le client est derrière un proxy. ;)

Dan

Posté

:unsure: Bon je n'arrive pas à récuperer ces données (utilisation de getenv et $_SERVER)...

d'autres idées?

Posté

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é
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

Posté

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.

Posté

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:

<?php
function 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;
}
?>

Posté

C'est quoi la différence entre une IP apparente et l'HTTP_CLIENT_IP?

  • 1 month later...
Posté

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 session
setcookie('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

  • 3 semaines plus tard...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...