Pour obtenir l'adresse IP du client dans mon application ASP.NET, j'ai utilisé X-Forwarded-For et obtenir la première adresse IP de la liste (en fonction des informations que j'ai trouvées, il existe un client, proxy1, proxy2 ..). Mais j'ai entendu dire récemment qu'il est préférable d'obtenir ces informations à partir de l'en-tête X-Forwarded-IP car l'adresse IP du client dans X-Forwarded-For peut être modifiée par proxy, quelle est la différence et quelle adresse dois-je utiliser? ?
X-Forwarded-For
est le moyen conventionnel d’identifier l’adresse IP d’origine de l’utilisateur se connectant au web provenant d’un proxy HTTP ou d’un équilibreur de charge.
X-Forwarded-IP
est le moyen classique d'identifier l'adresse IP d'origine de l'utilisateur se connectant au email via un service de messagerie HTTP.
X-Forwarded-For est un en-tête non standard, introduit à l'origine par Squid. Il s'agit d'un en-tête spécifique au proxy, qui aide le serveur à identifier le demandeur d'origine d'un appel ayant déjà traversé le proxy. Il est donc évident que tout proxy sur le chemin de requête doit/modifiera X-Forwarded-For. Sans proxy sur le chemin de la demande, cet en-tête ne devrait même pas être dans la demande.
Étant donné que cet en-tête est non standard, rien ne garantit que vous l'obtiendrez, et la façon dont il est géré peut différer selon l'implémentation du proxy. Vous n'avez aucune garantie non plus qu'il contiendra une adresse IP correcte.
Depuis 2014, l'IETF a approuvé une définition d'en-tête standard pour le proxy, appelée "Transféré", documentée ici https://tools.ietf.org/html/rfc7239 à utiliser à la place de X-Forwarded en-têtes. C’est celui-ci que vous devriez utiliser de manière fiable pour obtenir l’adresse IP source au cas où votre demande serait traitée par un proxy.
En général, les en-têtes de proxy (Forwarded ou X-Forwarded-For) constituent le bon moyen d'obtenir l'adresse IP de votre client seulement lorsque vous êtes sûr qu'ils vous parviennent via un proxy. S'il n'y a pas d'en-tête de proxy ou de valeur utilisable, vous devez utiliser par défaut la variable de serveur REMOTE_ADDR.