Wie verwende ich HTTP_X_FORWARDED_FOR richtig?
Okay, ich habe einen kleinen Authentifizierungs-Problem. Meine web-service ermöglicht es, eine Verbindung zu meinem API über HTTP mit einem Benutzernamen und Kennwort, aber diese Verbindung kann auch beschränkt sein auf eine bestimmte IP-Adresse.
Dies bedeutet, dass die $_SERVER['REMOTE_ADDR']
kann falsch sein. Ich weiß schon, dass Sie alle IP-Informationen können Sie niemals ganz verlassen werden - ich habe die Einschränkung nur in einem Versuch, fügen Sie eine weitere Schicht der Sicherheit.
Wenn dies der Allgemeine überblick über eine Anfrage zu meinem web-server:
clientSERVER => clientPROXY => myPROXY => mySERVER
Ist, dann bedeutet dies, dass mySERVER zeigt REMOTE_ADDR
von myPROXY statt, der client und sendet die aktuelle IP des Clients als HTTP_X_FORWARDED_FOR
.
Überwinden, meine web-service hat eine Liste von "trusted proxy" die IP-Adressen und wenn REMOTE_ADDR
ist von einem dieser vertrauenswürdigen IP-Adressen, dann sagt es meine web-service, der die tatsächliche IP-Adresse ist der Wert, der HTTP_X_FORWARDED_FOR
.
Nun das problem mit clientPROXY. Dies bedeutet, dass (sehr oft) mySERVER bekommt HTTP_X_FORWARDED_FOR
Wert, der mehrere IP-Adressen hat. Nach HTTP_X_FORWARDED_FOR
Dokumentation, der Wert ist eine Komma-getrennte Liste von IP-Adressen, von denen die erste IP ist die eigentliche echte client-und jede IP-Adresse ist, die von einem proxy.
So, wenn HTTP_X_FORWARDED_FOR
hat mehrere Werte, und mein Dienst ist der IP-Bereich eingeschränkt ist, muss ich überprüfen Sie die 'Letzte' Wert HTTP_X_FORWARDED_FOR
gegen meine erlaubten IP-Liste und ignorieren die tatsächliche client-IP?
Ich gehe davon aus, dass in einem system, wo habe ich die Liste der zulässigen IP-Adressen, die in der Whitelist die IP-Adresse sollte sein, dass ein proxy und nicht eine IP hinter dem proxy (denn das könnte eine localhost-IP-und ändern sich Häufig).
Und was HTTP_CLIENT_IP
?
InformationsquelleAutor der Frage kingmaple | 2012-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie diese Funktion verwenden, um die ordnungsgemäße client-IP:
InformationsquelleAutor der Antwort Hrishikesh Mishra
Ich wie Hrishikesh ' s Antwort, auf die ich nur noch dieses hinzuzufügen...da sahen wir eine Komma-separierte string herüber kommen, wenn mehrere proxies entlang des Weges verwendet wurden, fanden wir es notwendig, um ein explodieren und schnappen Sie sich den letzten Wert, wie das ist:
den array_filter ist in es zu löschen, leeren Einträge.
InformationsquelleAutor der Antwort user336828
Im Licht der neuesten httpoxy Schwachstellen, es gibt wirklich eine Notwendigkeit für ein vollständiges Beispiel, wie man mit
HTTP_X_FORWARDED_FOR
richtig.Also hier ist ein Beispiel in PHP geschrieben, wie zu erkennen, eine client-IP-Adresse, wenn Sie wissen, dass die client-Computer möglicherweise hinter einem proxy und du kennst diese proxy vertrauenswürdig ist. Wenn Sie nicht allen bekannt vertrauenswürdigen proxies, verwenden Sie einfach
REMOTE_ADDR
InformationsquelleAutor der Antwort Erki A
Können Sie auch dieses problem lösen via Apache-Konfiguration mit mod_remoteipindem Sie die folgende, um eine conf.d-Datei:
InformationsquelleAutor der Antwort zeroimpl
Wenn Sie es in eine Datenbank, ist dies eine gute Möglichkeit:
Legen Sie das ip-Feld in der Datenbank auf varchar(250), und verwenden Sie dann diese:
Dann müssen Sie nur überprüfen $realip gegen die Datenbank aus ip-Bereich
InformationsquelleAutor der Antwort mowgli
HTTP_CLIENT_IP ist der zuverlässigste Weg, um die IP-Adresse des Benutzers. Weiter ist HTTP_X_FORWARDED_FOR, gefolgt von REMOTE_ADDR. Überprüfen Sie alle drei, in dieser Reihenfolge, unter der Annahme, dass der erste, der eingestellt ist (
isset($_SERVER['HTTP_CLIENT_IP'])
gibt true zurück, wenn die variable gesetzt ist) korrekt ist. Können Sie eigenständig überprüfen, ob der Benutzer einen proxy mit verschiedenen Methoden. Überprüfen Sie diese.InformationsquelleAutor der Antwort TheEnvironmentalist