Discussion:
Probleme de reconnaissance d'IP
(trop ancien pour répondre)
Beryl
2008-09-05 21:15:26 UTC
Permalink
Bonjour à tous.

Je développe en ce moment une appli web pour mon boulot.
Chacun peut s'y loguer par un classique login et mot de passe.
Une trace est conservée dans une des tables de la base MySQL. Je
souhaite aussi y enregistrer l'IP du client.

J'utilise donc un classique $ip=$_SERVER["REMOTE_ADDR"];

Ça fonctionne impec sous IE6, mais sous Firefox, c'est l'IP du proxy qui
est enregistrée à chaque fois.
J'ai beau fouiller la toile et toutes les docs PHP que je possède, je ne
trouve aucune info sur ce bug :(

Avez-vous déjà été confronté à ce problème ?

Merci !
Nicolas Bouthors
2008-09-06 12:33:15 UTC
Permalink
Post by Beryl
Ça fonctionne impec sous IE6, mais sous Firefox, c'est l'IP du proxy
qui est enregistrée à chaque fois. J'ai beau fouiller la toile et
toutes les docs PHP que je possède, je ne trouve aucune info sur ce
bug :(
C'est pas un bug, c'est une feature ;)
http://en.wikipedia.org/wiki/X-Forwarded-For

Regardez du coté des champs Via et X-Forwarded-For de l'en-tête de
requête. Un "vrai" proxy doit s'annoncer (le champ Via est présent) et
transmettre l'IP de la machine initialement source dans
X-Forwarded-For.

Squid et mod_proxy d'Apache le font par défaut.

Attention ces deux champs sont à lire comme des tableau (plusieurs
valeurs dans le cas de plusieurs proxy en cascade).

Cdt,

Nicolas
--
Nicolas - 06 20 71 62 34 - http://nicolas.bouthors.org/album/
Beryl
2008-09-06 16:21:18 UTC
Permalink
Post by Nicolas Bouthors
C'est pas un bug, c'est une feature ;)
http://en.wikipedia.org/wiki/X-Forwarded-For
Regardez du coté des champs Via et X-Forwarded-For de l'en-tête de
requête. Un "vrai" proxy doit s'annoncer (le champ Via est présent) et
transmettre l'IP de la machine initialement source dans
X-Forwarded-For.
Squid et mod_proxy d'Apache le font par défaut.
Attention ces deux champs sont à lire comme des tableau (plusieurs
valeurs dans le cas de plusieurs proxy en cascade).
Quand je parlais de bug, je pensais à mon propre code bien sûr ;)
En fait, voici la routine exacte (honteusement pompée !!)

if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];}
elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
$ip = $_SERVER['HTTP_CLIENT_IP'];}
else{ $ip = $_SERVER['REMOTE_ADDR'];}

Mais seul le dernier test me renvoie réellement une IP.
Les deux premiers laissent $ip vide.

Ce serait donc un réglage au niveau d'Apache (que j'utilise effectivement) ?
Par contre je ne maîtrise pas le proxy qui est du ressort du sysadmin
(que je ne suis pas).

Merci pour le tuyau !
Paul
2008-09-07 17:27:47 UTC
Permalink
...
Post by Beryl
Quand je parlais de bug, je pensais à mon propre code bien sûr ;)
En fait, voici la routine exacte (honteusement pompée !!)
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];}
elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
$ip = $_SERVER['HTTP_CLIENT_IP'];}
else{ $ip = $_SERVER['REMOTE_ADDR'];}
Mais seul le dernier test me renvoie réellement une IP.
Les deux premiers laissent $ip vide.
Sûr de ça ? moi je me demande si cette cascade de tests fonctionne
comme tu le crois. SI tu fais afficher les valeurs de ces globales,
qu'obtiens tu ?
Post by Beryl
Ce serait donc un réglage au niveau d'Apache (que j'utilise
effectivement) ?
Par contre je ne maîtrise pas le proxy qui est du ressort du sysadmin
(que je ne suis pas).
Merci pour le tuyau !
Beryl
2008-09-07 20:16:39 UTC
Permalink
Post by Paul
...
Post by Beryl
Quand je parlais de bug, je pensais à mon propre code bien sûr ;)
En fait, voici la routine exacte (honteusement pompée !!)
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];}
elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
$ip = $_SERVER['HTTP_CLIENT_IP'];}
else{ $ip = $_SERVER['REMOTE_ADDR'];}
Mais seul le dernier test me renvoie réellement une IP.
Les deux premiers laissent $ip vide.
Sûr de ça ? moi je me demande si cette cascade de tests fonctionne
comme tu le crois. SI tu fais afficher les valeurs de ces globales,
qu'obtiens tu ?
J'ai lancé ces tests individuellement.
C'est comme cela que j'ai remarqué que seul le troisième me renvoyait un
résultat.
Beryl
2008-09-09 21:18:37 UTC
Permalink
Post by Beryl
Bonjour à tous.
Je développe en ce moment une appli web pour mon boulot.
Chacun peut s'y loguer par un classique login et mot de passe.
Une trace est conservée dans une des tables de la base MySQL. Je
souhaite aussi y enregistrer l'IP du client.
J'utilise donc un classique $ip=$_SERVER["REMOTE_ADDR"];
Ça fonctionne impec sous IE6, mais sous Firefox, c'est l'IP du proxy qui
est enregistrée à chaque fois.
J'ai beau fouiller la toile et toutes les docs PHP que je possède, je ne
trouve aucune info sur ce bug :(
Avez-vous déjà été confronté à ce problème ?
Merci !
Bon, j'ai mis le doigt sur le problème.
Tout vient en fait de Firefox (ce qui explique que cela fonctionne sous IE)
Dans les paramètres de Firefox, j'ai bien mentionné de ne pas passer par
le proxy pour les adresses 192.168.*.*
Mais ça ne fonctionne pas : il passe quand même par le proxy. Ce qui
explique que je récupère l'IP du proxy au lieu de mon poste.

D'où ma question : quelle est la syntaxe exacte à utiliser dans le
paramétrage de Firefox pour ne pas passer par le proxy pour un groupe
d'IP du même réseau ?

Continuer la lecture sur narkive:
Loading...