Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme de reconnaissance d'IP

5 réponses
Avatar
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 !

5 réponses

Avatar
Nicolas Bouthors
Beryl nous disait :
Ç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/
Avatar
Beryl
Nicolas Bouthors a écrit :

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 !
Avatar
Paul
Beryl a écrit :
Nicolas Bouthors a écrit :


...
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 ?

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 !


Avatar
Beryl
Paul a écrit :
Beryl a écrit :
Nicolas Bouthors a écrit :


...
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.
Avatar
Beryl
Beryl a écrit :
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 ?