[PHP] IP-script geeft 127.0.0.1 terug bij site-bezoeker

Pagina: 1
Acties:
  • 162 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
Ik log bij een vote-onderdeel op een site het IP-adres met het script dat ik bij een User Comment in de PHP Manual zag staan:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Returns IP-Address
function fetchip() {
    global $HTTP_SERVER_VARS;
    //get useful vars:
    $client_ip = $HTTP_SERVER_VARS['HTTP_CLIENT_IP'];
    $x_forwarded_for = $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'];
    $remote_addr = $HTTP_SERVER_VARS['REMOTE_ADDR'];

    // then the script itself
    if (!empty ($client_ip) ) {
        $ip_expl = explode('.',$client_ip);
        $referer = explode('.',$remote_addr);
        if($referer[0] != $ip_expl[0]) {
            $ip=array_reverse($ip_expl);
            $return=implode('.',$ip);
        } else {
            $return = $client_ip;
        };
    } elseif (!empty($x_forwarded_for) ) {
        if(strstr($x_forwarded_for,',')) {
            $ip_expl = explode(',',$x_forwarded_for);
            $return = end($ip_expl);
        } else {
            $return = $x_forwarded_for;
        };
    } else {
        $return = $remote_addr;
    }
    unset ($client_ip,$x_forwarded_for,$remote_addr,$ip_expl);
    return $return;
}


Er zijn 60.000+ votes uitgebracht, en bij 468 votes kwam het IP-adres 127.0.0.1 uit deze functie naar voren. Kijk ik in de apache-logs, dan staat daar een "gewoon" IP-adres, en ook verder geen bijzonderheden mbt de betreffende votes. Wel zijn alle 127.0.0.1's uit de database, in de Apace-logs overal tot hetzelfde IP-adres te herleiden, en het blijkt tevens dat dit adres ook andere IP-adressen heeft opgeleverd via bovenstaand script (en dan wel "gewone" IP-adressen waar niks bijzonders aan te zien is).

Omdat deze votes slechts betrekking hebben op 5 elementen (waar op duizenden elementen gestemd kon worden), vermoed ik dat iemand heeft lopen vogelen met een IP-spoofer. Dat die dingen bestaan weet ik wel, maar dat ze de server kunnen laten denken met een localhost-IP te maken te hebben verbaast me, en doet me bovendien afvragen wat dit voor gevolgen kan hebben voor het benaderen van applicaties die normaal gesproken alleen localhost te gebruiken zijn.

Heeft iemand daar meer info over? Is het inderdaad mogelijk om een server via een IP-spoofer te laten denken dat ie met een localhost-IP te maken heeft? Of zit er een fout in dit specifieke script waardoor deze wel, en de Apache logs niet om de tuin geleid kan worden?

PS. Het is niet mogelijk het ip-adres te overrulen via een GET, POST of anderzins: de query wordt opgebouwd als volgt:
PHP:
1
2
$sql  = "INSERT INTO table (kolom, ipadres, etc) ";
$sql .= "VALUES ('...','" . fetchip() . "', '...')";


PS2: bij andere votes lijkt gewoon het IP gelogd te worden dat ook in de Apache-logs terug te vinden is (op basis van een steekproef).

[ Voor 5% gewijzigd door Anders op 16-02-2004 10:32 ]

Ik spoor veilig of ik spoor niet.


Acties:
  • 0 Henk 'm!

  • Millennium
  • Registratie: Augustus 2000
  • Laatst online: 14-09 18:02

Millennium

Bug free !!!

Volgens mij heeft dit te maken met X_FORWARD_FOR. X_Forward is namelijk een extra header voor proxyservers, waarmee je kan achterhalen het oorsprokkelijke IP van de client die via de proxy loopt. Mijn gok is dat iemand een lokale proxy gebruikt. en dat je deze header uitleest

Rampen bak 2004


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
$HTTP_SERVER_VARS['HTTP_CLIENT_IP'] bestaat nooit. Wordt (kennelijk foutief) alleen in de comments genoemd. Je moet $HTTP_SERVER_VARS['REMOTE_ADDR'], of eigenlijk $_SERVER['REMOTE_ADDR'] hebben. Check de manual.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

Verwijderd

bigtree schreef op 16 februari 2004 @ 12:44:
$HTTP_SERVER_VARS['HTTP_CLIENT_IP'] bestaat nooit. Wordt (kennelijk foutief) alleen in de comments genoemd. Je moet $HTTP_SERVER_VARS['REMOTE_ADDR'], of eigenlijk $_SERVER['REMOTE_ADDR'] hebben. Check de manual.
Idd, dan zou je ook nog eens kunnen kijken als hij 127.0.0.1 wil returnen dat je dan een andere waarde gebruikt (bv $_SERVER["REMOTE_ADDR"] ).

Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Ik heb thuis standaard '127.0.0.1' bij HTTP_X_FORWARDED_FOR in m'n http requests staan.
Deze variabele kun je gewoon niet vertrouwen.
REMOTE_ADDR is de enige die te vertrouwen is.

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
justmental schreef op 16 februari 2004 @ 13:52:
Ik heb thuis standaard '127.0.0.1' bij HTTP_X_FORWARDED_FOR in m'n http requests staan.
Deze variabele kun je gewoon niet vertrouwen.
REMOTE_ADDR is de enige die te vertrouwen is.
Je moet goed controleren welke van de 2 variablen je moet hebben. Vertrouwen hebben in een vraiable vind ik wel heel erg ver gaan.

Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
justmental schreef op 16 februari 2004 @ 13:52:
Ik heb thuis standaard '127.0.0.1' bij HTTP_X_FORWARDED_FOR in m'n http requests staan.
Deze variabele kun je gewoon niet vertrouwen.
Aha.. Dus als je zelf een proxy draait kun je hiermee van alles meesturen. Dat schiet dan inderdaad niet op :)
REMOTE_ADDR is de enige die te vertrouwen is.
Mja, tot op zekere hoogte dan natuurlijk. Als iemand bij elke request een andere proxy server gebruikt, heb je hier ook niet veel aan als identificatie. En da's toch het doel van het loggen van IP-adres. Maar goed, het zal dan allicht betrouwbaarder zijn dan de HTTP_X_FORWARDED_FOR.

Is dit $_SERVER["REMOTE_ADDR"] overigens altijd dezelfde waarde als die in de Apache logs wordt weggeschreven?

Ik spoor veilig of ik spoor niet.


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Anders schreef op 16 februari 2004 @ 14:21:
[...]


Aha.. Dus als je zelf een proxy draait kun je hiermee van alles meesturen. Dat schiet dan inderdaad niet op :)
Inderdaad. Je zal een hoop bezoekers krijgen uit 192.168.* (welke provider was dat ook al weer? ;))

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Anders schreef op 16 februari 2004 @ 14:21:
[...]
Is dit $_SERVER["REMOTE_ADDR"] overigens altijd dezelfde waarde als die in de Apache logs wordt weggeschreven?
Jup, dit is namelijk het ip waarmee je 'internet op gaat'

p.s.: je kunt ze dus het beste gewoon allebei loggen.

[ Voor 14% gewijzigd door marty op 16-02-2004 16:29 ]


Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
bigtree schreef op 16 februari 2004 @ 16:11:Inderdaad. Je zal een hoop bezoekers krijgen uit 192.168.* (welke provider was dat ook al weer? ;))
196 op de 60.000 dus dat valt nog mee: 0.3%

Maar ik hou het dan wel op de REMOTE_ADDR.

Thx all

Ik spoor veilig of ik spoor niet.

Pagina: 1