En-tête de lecture X-Forwarded-For

Je veux lire la valeur de l’en X-Forwarded-For tête X-Forwarded-For dans une demande.

J’ai essayé

 HttpContext.Current.Request.Headers["X-Forwarded-For"].Split(new char[] { ',' }).FirstOrDefault(); 

en C #.

OU dois-je diviser l’en-tête par ":" et prendre la deuxième chaîne? Je demande cela parce que, dit Wikipedia

Le format général du champ est le suivant: X-Forwarded-For: client1, proxy1, proxy2

Le format que vous obtenez en retour est client1, proxy1, proxy2

Donc, vous le divisez avec la virgule et vous obtenez le premier à voir l’adresse IP de votre client.

Si cela aide, il s’agit d’un moyen simple d’obtenir l’adresse IP de l’utilisateur, en considérant l’en-tête X_FORWARDED_FOR.

 var forwardedFor = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; var userIpAddress = Ssortingng.IsNullOrWhiteSpace(forwardedFor) ? Request.ServerVariables["REMOTE_ADDR"] : forwardedFor.Split(',').Select(s => s.Trim()).First(); 

N’oubliez pas que X-Forwarded-For peut contenir tout ce que le client y écrit. Il peut contenir une injection XSS ou SQL.

Parfois, le premier peut contenir l’une des adresses réservées locales (privées), ce qui n’est pas utile. De même, les premières positions sont ouvertes à l’usurpation d’identité.

Mise à jour – avril 2018: l’échantillonnage des cas d’un site Web de production en direct où la première adresse est locale (privée) indique un problème de configuration sur le réseau de l’utilisateur final ou de son fournisseur de services Internet. Les cas ne se produisent que rarement (<1%) et de manière constante pour les mêmes utilisateurs finaux.

La réponse ci-dessous suggère de marcher de droite à gauche jusqu’à ce que vous trouviez une adresse publique. Je ne suis pas sûr que quiconque le fasse réellement, mais cela souligne le problème.

https://husobee.github.io/golang/ip-address/2015/12/17/remote-ip-go.html