$_SERVER['REMOTE_ADDR'] pas fiable ?

WRInaute discret
Bonjour,

J'ai appris que la variable globale $_SERVER['REMOTE_ADDR'] n'était pas du tout fiable puisqu'il était possible d'y insérer une ip ne nous appartenant pas.

Mais alors, comment faire pour être sûr de connaître la véritable adresse ip du visiteur ? Tous les grands sites, tels que Google, Facebook, etc. récupèrent l'adresse ip de leurs visiteurs (tel que tout basiquement pour google adsense), mais quelle méthode emploient-ils alors pour s'assurer qu'il s'agit de la vraie ?

Et sinon, petite question associée me permettant de mieux comprendre le problème : comment est-il possible de modifier cette variable ? Par exemple sur Windows, que doivent-ils faire pour parvenir à la modifier ?

Merci d'avance,

7804j
 
Nouveau WRInaute
Bonsoir.

Il n'est pas possible de déterminer si l'adresse IP est réelle ou fictive. Avec les proxy, l'adresse IP reçue sera pas forcément la bonne, et il n'est pas vraiment possible de contrer cela. Le proxy se connecte à une autre connexion qui peut se connecter à une autre connexion et ainsi de suite jusqu'à finir par donner l'adresse IP d'une connexion qu'on utilise, mais pas forcément du pc auquel on navigue.

Je veux dire, il est certainement possible d'arriver à déterminer la vraie IP, mais je me souviens d'un gros site communautaire ou j'étais admin qui avait tenté de bannir à vie certains membres suite à de nombreux et graves débordements. Après plusieurs tentatives (fermeture de compte, blocage d'ip, blocage de cookie, etc), on a pu réaliser qu'il n'était pas possible d'y arriver de façon sûre à 100% : il est désormais facile de contourner n'importe quel programme.
 
WRInaute discret
Cette variable est fiable, dans le sens ou elle te donne l'ip de CONNEXION!! il est impossible de la modifier. Dans le cas de l'utilisation d'un proxy, ca dépend de son niveau d'anonymat, les faibles transmettras LEUR ip via remote addr + une variable $_serveur[' forwed x'] (dans le genre je suis sur portable ;) ) les plus haut niveau ne la transmettent pas.
CETTE variable n'est pas indispensable et dlnc modifiable. Rien a faire que tu soit sur windaube /mac/Linux c'est le navigateur qui compte. Le meuilleur pour le dvt etant Firefox, pour modifier ca => Data temper feras ton bonheur :)
Ps: n'affiche pas cette valeur sur ton site!!! Un blackhat pourrais injecter des donnés, en gros, utilise pas mais VRAIMENT sans garantie!!! A titre informative :)
 
WRInaute discret
Merci, je m'étais un peu mal exprimé car je voulais savoir s'il était possible d'y placer une ip qui ne nous appartient PAS DU TOUT, et qu'on ne possède même pas grâce à un proxy (par exemple, serait-il possible qu'un visiteur se connecte avec ma propre adresse ip ?). Mais si j'ai bien compris, la réponse semble être non.

Tu me dis effectivement qu'il me faudrait peut-être vérifier une autre variable qui pourrait me permettre dans certains cas d'obtenir à la fois l'ip du proxy et celle du portable. Pourquoi pas, je vais me renseigner.

Par contre, j'ai un doute quant aux risques d'injections. Il me semble qu'il s'agit d'une variable qui est préalablement vérifiée par PHP et qu'il n'est, pas conséquent, pas possible d'y mettre autre chose qu'une adresse ip. Il ne devrait donc pas y avoir besoin d'utiliser un mysql_real_escape_string je pense, non ?
 
WRInaute discret
Je vais essayer d'être plus clair :)

Cas numéro 1 , pas de proxy :
$_SERVER['REMOTE_ADDR'] donne bien l'ip de l'utilisateur
$_SERVER['HTTP_X_FORWARDED_FOR'] n'existe pas.
/!\ MAIS N'IMPORTE QUI PEUT LA CREER ET METTRE N'IMPORTE QUOI DEDANS ET FAIRE UNE INJECTION!!! /!\

Cas numéro 2, proxy de niveau anonyme faible :
$_SERVER['REMOTE_ADDR'] donne bien l'ip du serveur proxy
$_SERVER['HTTP_X_FORWARDED_FOR'] existe et contient l'ip du visiteur.
/!\ MAIS N'IMPORTE QUI PEUT LA CREER ET METTRE N'IMPORTE QUOI DEDANS ET FAIRE UNE INJECTION!!! /!\

Cas numéro 3, proxy de niveau anonyme haut :
$_SERVER['REMOTE_ADDR'] donne bien l'ip du serveur proxy
$_SERVER['HTTP_X_FORWARDED_FOR'] n'existe pas
/!\ MAIS N'IMPORTE QUI PEUT LA CREER ET METTRE N'IMPORTE QUOI DEDANS ET FAIRE UNE INJECTION!!! /!\

Donc cette variable n'est JAMAIS FIABLE, juste donné a titre INFORMATIF, peut contenir des injections SQL!!!
J'espère avoir était assez clair sur ce point!
Et attention aux fonctions de ce genre :
Code:
<?php
function retrieve_ip()
{
	$ip=htmlspecialchars($_SERVER['REMOTE_ADDR']);
	if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
	{
		$ip=htmlspecialchars($_SERVER['HTTP_X_FORWARDED_FOR']);
	}
	return ($ip);
}
Car elle si elle parait bien, elle permet de cacher son ip à ton visiteur simplement en créant la variable $_SERVER['HTTP_X_FORWARDED_FOR'] sans meme passer par un proxy ;)

D'autres questions ou quelque chose que tu n'as pas compris? N'hésite pas ;)

ps: avec un petit bagage de 8mois d'étude en sécurité informatique des sites web, je n'ai jamais rencontré une technique pour corrompre $_SERVER['REMOTE_ADDR'], et quand tu y réfléchis, c'est logique, il faut bien que le serveur sache à qui renvoyer la page que tu demande ;)

/!\ La sécurité informatique est une illusion /!\
 
WRInaute discret
Merci, j'ai mieux compris maintenant :D

A priori la REMOTE_ADDR me suffira dans un premier temps, car bien qu'on puisse avoir beaucoup de proxys, ça fait à chaque fois une ip supplémentaire bannie et les bots en ont pas non plus une infinité.
 
Discussions similaires
Haut