Flacon de demande.remote_addr est mauvais sur webfaction et de ne pas montrer la réalité IP de l'utilisateur
Je viens de déployer une Fiole application sur Webfaction et j'ai remarqué que request.remote_addr
est toujours 127.0.0.1
. ce qui est bien sûr, n'est pas d'une grande utilité.
Comment puis-je obtenir l'adresse IP réelle de l'utilisateur dans la Fiole sur Webfaction?
Merci!
OriginalL'auteur Ignas Butėnas | 2012-10-07
Vous devez vous connecter pour publier un commentaire.
Si un proxy est en face de la Fiole, puis quelque chose comme cela obtenir l'adresse IP réelle en Flacon:
Mise à jour: Très bon point mentionné par Eli dans son commentaire. Il pourrait y avoir quelques problèmes de sécurité si vous venez tout simplement de l'utiliser. Lire Eli post pour obtenir plus de détails.
Très bon point Eli. L'ajout de la note de la réponse avec le lien de votre post.
Pas si sûr à ce sujet. docs.webfaction.com/software/django/... (on dirait qu'il utilise [0], mais votre point de vue est toujours correct tout simplement pas pour webfaction je pense)
Vous ne voulez pas accès
x-forwarded-for
directement. Flacon et werkzeug fournirrequest.access_route
qui contient le déjà-split liste des IP de cet en-tête.Si j'applique le Werkzeug ProxyFix puis demande.access_route va encore me donner le spoofing d'IP: stackoverflow.com/questions/22868900/...
OriginalL'auteur Ignas Butėnas
Le problème est qu'il y a probablement une sorte de procuration devant du Flacon. Dans ce cas, la "vraie" adresse IP peut souvent être trouvé dans
request.headers['X-Forwarded-For']
.OriginalL'auteur Rob Wouters
Werkzeug middleware
Flacon de documentation est assez spécifique sujet recommandé serveur proxy inverse de l'installation:
Et aussi sur la considération de la sécurité:
L'a suggéré le code (qui installe le middleware) qui permettra de faire
request.remote_addr
retour l'adresse IP du client est:Note
num_proxies
qui est1
par défaut. C'est le nombre de serveurs proxy en face de l'app.Le code est comme suit (dernière
werkzeug==0.14.1
au moment de la rédaction):Webfaction
Webfaction de la documentation sur Accéder à
REMOTE_ADDR
dit:Ils ne disent pas ce qu'ils font lorsqu'une demande d'un client contient déjà
X-Forwarded-For
en-tête, mais en suivant le sens commun, je suppose qu'ils remplacent. Ainsi, pour Webfactionnum_proxies
doit être réglé à0
.Nginx
Nginx est plus explicite à ce sujet le
$proxy_add_x_forwarded_for
:Pour Nginx en face de l'app
num_proxies
devrait être laissé à la valeur par défaut1
.OriginalL'auteur saaj
Vous pouvez utiliser
request.access_route
pour accéder à la liste de la propriété intellectuelle :Mise à jour:
Vous pouvez simplement écrire ceci:
some_list[-1] == some_list[0]
sur une seule longueur des listes d'Ce n'est pas simple liste de longueur. il peut y avoir plus d'un élément en elle.
Je pense que @tristan point est que le dernier élément est toujours accessible pour les listes avec >= 1 éléments. Donc le code peut toujours écrit comme
request.access_route[-1]
pour obtenir la dernière adresse IP dans la liste.Si vous êtes en retard pour exemple serveur proxy cette liste a plus d'une valeur. c'est pourquoi c'est une liste pas seulement une chaîne de caractères.
Inutile d'utiliser de contrôle de la longueur, comme @tristan souligné. Votre
else
serait seulement si la longueur est de 1 (Flacon reviendra toujours au moins un résultat.), quirequest.access_route[-1]
serait toujours valable.OriginalL'auteur itmard
La réécriture de l'Ignasi de réponse:
N'oubliez pas de lire Eli post sur l'usurpation de considérations.
OriginalL'auteur Shankar Cabus