Reelle IP des Benutzers mit Code-Signierer

7

Meine App verfolgt die IP-Adresse von Nutzern, die sich auf der Website anmelden. Das Tracking funktionierte gut auf einem normalen Webserver (wir waren auf Hostgator), schien aber seltsame IP-Adressen zu verfolgen, als wir auf eine PaaS-Plattform umschalten (Pagodabox) Nachdem sie mit Pagodabox-Support gesprochen hatten, informierten sie mich, dass der IPs-Codeignierer aufging die IPs der Load Balancer / Router von Pagodabox und um die tatsächliche IP-Adresse eines Benutzers zu erhalten, müsste ich HTTP_X_FORWARDED_FOR

verwenden

Ich habe die Code-Funktion $this->input->ip_address() des Codeigniters verwendet, um die IP des Benutzers wiederherzustellen. Ich schaute auf die Funktion und bemerkte, dass sie eine Art von Funktionen hatte, um den HTTP_X_FORWARDED_FOR IP-Wert zu erhalten, aber ich bin mir nicht sicher, wie ich es benutzen soll. Muss ich etwas in der Konfiguration ändern / hinzufügen?

EDIT: Nachdem ein paar Benutzer darauf hingewiesen haben, wo ich in die Liste der IP-Adressen von Load Balancers aufnehmen soll, kam eine neue Frage auf: Was würde ich tun, wenn sich die IP-Liste häufig ändert? (dh keine statische IP, alle dynamisch)

    
Xecure 23.01.2013, 23:02
quelle

7 Antworten

10

Ich bin mir sicher, dass Sie das inzwischen gelöst haben, aber ich dachte, ich würde die richtige Antwort für zukünftige Referenz veröffentlichen. Ich bin auf dasselbe Problem gestoßen (Verwenden von Lastenausgleichsfunktionen in AWS mit einer CodeIgniter-App.) Wie Sie bereits erwähnt haben, ist es einfach, die richtige IP-Adresse hinter einem Lastenausgleichsmodul oder einer anderen verteilten Umgebung mithilfe des Headers HTTP_X_FORWARDED_FOR zu erhalten. Das Problem ist, wie implementieren wir diese Lösung in CodeIgniter korrekt? Wie die vorherige Antwort zeigt: Schreibe deine eigene IP-Funktion. Das Problem dabei ist, was ist, wenn ip_address () in Ihrer App aufgerufen wird? Wäre es nicht besser, diese Funktion zu überschreiben (mit einer, die auf die richtige Überschrift schaut)? CodeIgniter hat hierfür einen praktischen Mechanismus, der praktisch ist:

Die Lösung besteht darin, die Klasse CodeIgniter Input zu erweitern, indem Sie in / application / core eine neue Klassendatei namens MY_Input.php erstellen (MY_ ist ein konfigurierbares Präfix für Erweiterungen, das Sie in Ihrer Konfigurationsdatei ändern können). Mit Erweiterungen können Sie eine Funktion mit dem Namen SAME als ursprüngliche Klassenmethode erstellen, ohne dass etwas kaputt geht, und ohne Core-Dateien zu bearbeiten. CodeIgniter verwendet stattdessen nur Ihre neue Methode. Ihre erweiterte Eingabeklasse sieht etwa so aus:

%Vor%

Auf diese Weise haben wir das Kernverhalten geändert, ohne das Framework zu hacken, und bestehende Aufrufe von ip_address () in Ihrer App verwenden nun Ihre Methode.

In Bezug auf den Umgang mit anderen IPs in der Kette sollte es, wenn Sie nur an der Client-IP interessiert sind, keine Rolle spielen. Zumindest bei AWS Load Balancers scheint der HTTP_X_FORWARDED_FOR-Header immer die korrekte Client-IP zu enthalten.

    
Oliver Holmberg 28.04.2013, 16:28
quelle
6

Die Lösung von Oliver funktioniert, aber unter bestimmten Umständen ist es besser, Folgendes zu verwenden, wenn Sie die Proxy-IP-Adressen kennen, die verwendet werden. Bearbeiten Sie Ihre Datei application / config / config.php so, dass sie Folgendes enthält:

%Vor%

Beachten Sie auch, dass die Kopfzeileninformationen normalerweise nicht zuverlässig sind und nicht für sicherheitsrelevante Zwecke verwendet werden sollten. Zum Beispiel ist es nicht ungewöhnlich, Administratoren zu beschränken, nur einige weiß gelistete IP-Adressen zu verwenden.

    
Thava 19.12.2013 10:00
quelle
3
%Vor%

Versuchen Sie so etwas. Sehen Sie, ob es funktioniert. Verwendung:

%Vor%     
edwardmp 23.01.2013 23:08
quelle
2

Ich bin auf eine Version der Thava-Lösung gestoßen, die sich hervorragend für Situationen eignet, in denen sich die Load-Balancer-IPs ändern können (wie AWS) und die CIs-Konfigurationsdateien nativ nutzt. Wenn Sie wissen, dass Sie hinter einem LB laufen, können Sie config.php wie folgt ändern:

%Vor%

Wissen, dass REMOTE_ADDR immer die aktuelle LB ist.

Danke an Eric Brown hier Ссылка

    
JSJ 21.06.2017 14:42
quelle
2

Ich weiß, dass es eine gute Antwort gibt, die für Ihre Frage relevant ist und von Ihnen akzeptiert wird, aber für zukünftige Benutzer teile ich eine Funktion, die perfekt für mich in allen Situationen funktioniert.

%Vor%     
Imran Qamer 04.05.2015 09:53
quelle
1

Ich hatte die gleiche Situation bei der Arbeit, außer dass die IPs nicht wirklich "dynamisch" waren, aber die "Infrastruktur-Leute", die Proxy-Server und Load-Balancer verwalten, um sie aus unbekannten Gründen zu ändern. Also mussten wir verhandeln und eine Lösung finden, die einen Haken in ihrem Konfigurations- / Provision-Management-Tool setzt, um irgendwo eine Konfigurationsdatei zu schreiben (in einem Ordner, auf den der Benutzer mit unserem Apache / PHP zugreifen kann).

Also habe ich einen CI-Hook verwendet, um diese Datei im System Bootstrap zu lesen, um meine App-Konfiguration zu ändern und Werte wie Proxy-IP-Liste, Cache-Pfad, Cookie-Domain usw. zu aktualisieren.

    
Stefano Mozart 06.11.2014 18:53
quelle
1

In Ihrem Fall können Sie die angegebene Load-Balancer-IP in $config['proxy_ips'] ( application/config/config.php ) hinzufügen, zum Beispiel:

%Vor%

Dynamische Proxy-IP:

Je nach Ihrem dynamischen IP-Problem können Sie den IP-Bereich für das Load-Balancer-Netzwerk maskieren, zum Beispiel:

%Vor%
  

Die Maskenfunktion ist in der Codeigniter 3

möglich

Hole IP-Methode:

%Vor%

Während $this auf CI-Instanz verweist.

  

Diese Methode berücksichtigt die Einstellung $ config ['proxy_ips'] und gibt die gemeldete HTTP_X_FORWARDED_FOR-, HTTP_CLIENT_IP-, HTTP_X_CLIENT_IP- oder HTTP_X_CLUSTER_CLIENT_IP-Adresse für die zulässigen IP-Adressen zurück.

    
Nick Tsai 07.07.2017 15:07
quelle

Tags und Links