Enrico: Code zur Ermittlung der IP-Adresse noch zeitgemäß?

Hallo,

ist nachfolgender Code zur Ermittlung der IP-Adresse aus dem Jahr 2004 noch zeitgemäß oder hat sich hier etwas geändert?

  
function IP_ermitteln()  
{  
   if (isset ($_SERVER))  
   {  
      if (isset ($_SERVER['HTTP_X_FORWARDED_FOR']))  
      {  
         $IP = $_SERVER['HTTP_X_FORWARDED_FOR'];  
      }  
      elseif (isset ($_SERVER['HTTP_CLIENT_IP']))  
      {  
         $IP = $_SERVER['HTTP_CLIENT_IP'];  
      }  
      else  
      {  
         $IP = $_SERVER['REMOTE_ADDR'];  
      }  
   }  
   else  
   {  
      if (getenv ('HTTP_X_FORWARDED_FOR'))  
      {  
         $IP = getenv ('HTTP_X_FORWARDED_FOR');  
      }  
      elseif (getenv ('HTTP_CLIENT_IP'))  
      {  
         $IP = getenv ('HTTP_CLIENT_IP');  
      }  
      else  
      {  
         $IP = getenv ('REMOTE_ADDR');  
      }  
   }  
}  

Danke und Gruß,
Enrico

  1. Moin!

    ist nachfolgender Code zur Ermittlung der IP-Adresse aus dem Jahr 2004 noch zeitgemäß oder hat sich hier etwas geändert?

    Er war es schon 2004 nicht...

    Die IP, die dein Server sieht, ist die einzig entscheidende. Und die steht in REMOTE_ADDR. Alles andere sind freundliche HTTP-Header desjenigen, der bei dir zugreift, und deshalb nicht vertrauenswürdig.

    Abgesehen davon: Was brächte es dir, zu wissen, dass die "echte" IP 192.168.1.2 lautet?

    - Sven Rautenberg

    1. Hallo Sven,

      Die IP, die dein Server sieht, ist die einzig entscheidende. Und die steht in REMOTE_ADDR

      Abgesehen davon: Was brächte es dir, zu wissen, dass die "echte" IP 192.168.1.2 lautet?

      Mir geht es darum, bei Einträgen, die uns Besucher hinterlassen, die eindeutige IP-Adresse mit ab zu speichern.

      Gruß,
      Enrico

      1. Hallo Enrico,

        Mir geht es darum, bei Einträgen, die uns Besucher hinterlassen, die eindeutige IP-Adresse mit ab zu speichern.

        das wird nicht möglich sein, da die IP-Adresse über die Zeit betrachtet nicht eindeutig ist. Sie ist nur zum Zeitpunkt des Zugriffs tatsächlich relevant, ein paar Sekunden später könnte dieselbe IP-Adresse schon für einen ganz anderen Host gelten.

        Und wenn dein Besucher einen Proxy benutzt (ob absichtlich oder von seinem Provider verordnet), kannst du, wie Sven schon ausgeführt hat, seine "echte" IP-Adresse sowieso nicht zuverlässig bestimmen - das ist in manchen Fällen sogar der Sinn eines Proxys.
        Das gleiche gilt bei nichtöffentlichen Netzen, z.B. Firmen-Intranets, bei denen mehrere hundert Rechner nach draußen mit derselben IP-Adresse auftreten. Auch da hast du keine Chance, das weiter aufzudröseln.

        Ciao,
         Martin

        --
        Ordnung ist, wenn man etwas findet, was man gar nicht sucht.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Das gleiche gilt bei nichtöffentlichen Netzen, z.B. Firmen-Intranets, bei denen mehrere hundert Rechner nach draußen mit derselben IP-Adresse auftreten. Auch da hast du keine Chance, das weiter aufzudröseln.

          Ich ERGÄNZE das mal durch einen Hinweis die passenden Einträge in der squid-Konfiguration. Der Privoxy wird das Setzen eines solchen X-Forwarded_For Request-Headers auch vermeiden.

          Jörg Reinholz

      2. Mir geht es darum, bei Einträgen, die uns Besucher hinterlassen, die eindeutige IP-Adresse mit ab zu speichern.

        Nur mal nebenbei erwähnt, da gabs IMO ein paar Urteile, die genau das verbieten. Zumindest bei Webserver-Logfiles o.ä. hab ich da mal was mitbekommen.
        Ob das z.B. bei Blogeinträgen o.ä. auch gilt, weiss ich nicht, aber das kannst du sicher irgendwo nachlesen.

        1. Tach,

          Nur mal nebenbei erwähnt, da gabs IMO ein paar Urteile, die genau das verbieten. Zumindest bei Webserver-Logfiles o.ä. hab ich da mal was mitbekommen.

          z.B. http://www.e-recht24.de/news/sonstige/645.html

          mfg
          Woodfighter

      3. Moin!

        Hallo Sven,

        Die IP, die dein Server sieht, ist die einzig entscheidende. Und die steht in REMOTE_ADDR

        Abgesehen davon: Was brächte es dir, zu wissen, dass die "echte" IP 192.168.1.2 lautet?

        Mir geht es darum, bei Einträgen, die uns Besucher hinterlassen, die eindeutige IP-Adresse mit ab zu speichern.

        Dann willst du nur die REMOTE_ADDR speichern, und nix anderes.

        Zum einen: In X_FORWARDED_FOR steht nicht nur eine einzige IP, sondern eine Liste aller Zwischenstationen, kommagetrennt. Wobei sich Zwischenstationen nur eintragen, wenn sie konfiguriert sind, das zu tun, und eine nachfolgende Zwischenstation das nicht wieder rückgängig macht. Dein Code geht auf diese Möglichkeit nicht ein.

        Zweitens: In einem "normalen" Usecase wird der am Netzwerkausgang stehende Proxy dort zwar die IP des echten internen Clients eintragen, aber weil IPv4-Adressen knapp sind, dürfte dieses interne Netz mit Sicherheit IPs aus dem privaten Bereich enthalten. Denen kann man aber nicht ansehen, wem sie gehören. Wenn du also anhand der IP irgendwelche Maßnahmen rechtlicher Natur ergreifen wolltest, brauchst du als ersten Ansatzpunkt den Provider. Und der steht nicht hinter einer privaten Netzwerk-IP, sondern hinter der REMOTE_ADDR.

        Drittens: Der Wert X_FORWARDED_FOR wird ausschließlich vom User geliefert. Was hindert jemanden daran, dort einfach Blödsinn reinzuschreiben? Es hat schon Fälle gegeben, wo aufgrund dieser Angabe, sofern sie "127.0.0.1" war, auf Webseiten ein Admin-Menü eingeblendet wurde, ohne weiteres Passwort. Ziemlich leicht zu hacken, wenn man's weiß. Aber nicht unmöglich rauszufinden, wenn man's nicht weiß. Und beliebig schnell zu ändern, sogar ohne dass der Angreifer sich neu verbinden und auf eine neue dynamische IP hoffen muss. Es ist also auch ungeeignet, um deswegen irgendwelche Sperren zu aktivieren.

        - Sven Rautenberg

  2. Also diese Adresse ist das genauste was du mit php erreichst:
    $ip = $_SERVER[REMOTE_ADDR].':'.$_SERVER[REMOTE_PORT];