Wie kann ich sicher bekommen die user die echte IP-Adresse im Kolben (mit mod_wsgi)?
Habe ich ein Fläschchen app-setup auf mod_wsgi/Apache und benötigen für die Anmeldung die IP-Adresse des Nutzers. Anfrage.remote_addr gibt "127.0.0.1" und dieses Update zu beheben versucht, aber ich habe festgestellt, dass Django entfernt ähnlichen code aus Sicherheitsgründen.
Gibt es einen besseren Weg, um sicher bekommen die user echte IP-Adresse?
EDIT: Vielleicht bin ich etwas fehlt offensichtlich. Ich bewarb mich werkzeug s/Flask beheben, aber es scheint nicht, einen Unterschied zu machen, wenn ich versuche, eine Anfrage mit veränderten Header:
run.py:
from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
app.run()
view.py:
for ip in request.access_route:
print ip # prints "1.2.3.4" and "my.ip.address"
Das gleiche Ergebnis passiert, wenn ich die ProxyFix aktiviert ist oder nicht. Ich fühle mich wie ich bin etwas fehlt ganz offensichtlich
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
- Anfrage.access_route
- Attribut nur, wenn Sie definieren eine Liste von vertrauenswürdigen proxies.Den
access_route
Attribut dieX-Forwarded-For
- header, fällt zurück auf dieREMOTE_ADDR
WSGI-variable; letzteres ist in Ordnung, da dein server bestimmt; dieX-Forwarded-For
könnte haben gerade über jedermann, aber wenn Sie Vertrauen, einen proxy, um den Wert korrekt, dann verwenden Sie das erste (vom Ende), das ist nicht trusted:Diese Weise, selbst wenn jemand fälscht die
X-Forwarded-For
header mitfake_ip1,fake_ip2
ist, dass der proxy-server hinzufügen,spoof_machine_ip
zu Ende, und der obige code setzt dieremote_addr
zuspoof_machine_ip
, egal, wie viele Vertrauenswürdige Proxys gibt es zusätzlich zu Ihrem äußersten proxy.Dies ist der whitelist-Ansatz Ihrem verlinkten Artikel spricht über (kurz, in Rails verwendet es), und was Zope implementiert über 11 Jahren.
Ihre ProxyFix Ansatz funktioniert ganz gut, aber Sie missverstanden, was es tut. Es nur setzt
request.remote_addr
; dierequest.access_route
Attribut ist unverändert (dieX-Forwarded-For
header ist nicht eingestellt werden, indem die middleware). Jedoch, wäre ich sehr vorsichtig mit blind-zählen-aus-proxies.Anwendung der gleichen whitelist-Ansatz an die middleware würde wie folgt Aussehen:
Explizit: dieser middleware auch nur setzt
request.remote_addr
;request.access_route
bleibt unberührt.Aus, dass Artikel, es klingt wie die Frage der Sicherheit ist das Vertrauen in die ersten Wert der
X-Forwarding-For
header. Sie können das umzusetzen, was der Artikel schlägt vor, in der "mein Versuch eine bessere Lösung" - Abschnitt zu überwinden, dieses potential security Problem. Eine Bibliothek, die ich verwendet habe, in django mit Erfolg django-ipware. Trace durch seine Umsetzung zu Rollen Sie Ihre eigenen für die Flasche (Sie können sehen, dass es ähnlich zu dem, was, der Artikel suggeriert):https://github.com/un33k/django-ipware/blob/master/ipware/ip.py#L7
Können Sie nicht sicher, denn das kann man nicht Vertrauen, alle Teile, die in einer http - (oder tcp -) Verbindung