[php] ip adres tonen d.m.v. HTTP_X_FORWARD_FOR

Pagina: 1
Acties:

  • LeMerchant
  • Registratie: Februari 2002
  • Laatst online: 22-07-2020

LeMerchant

Da's tochnie normaaaaal!

Topicstarter
Ik heb gehoord dat $REMOTE_ADDR het ip weergeeft van je proxy. Ik krijg dan resultaten als : 127.0.0.1 en [mijn_eigen_ip].
Met 'HTTP_X_FORWARD_FOR' zou het echt werken, tenminste als deze een waarde krijgt meegestuurd (las ik ergens). Ik heb gezocht en gezocht en al wat scriptjes gevonden, maar ze doen het nog steeds niet zoals ik het wil.

Het gaat dus om, om de ip nummers van bezoekers van een gastenboek te tonen.

Script A:
=======

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
if (getenv("HTTP_X_FORWARDED_FOR")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else {
$ip = getenv("REMOTE_ADDR");
}

if ($ip == "[mijnip]"){
echo "webmaster";
}
else {

echo "$ip";
}


Geeft als uitvoer: "webmaster". Maar dus ook als iemand anders deze pagina bezoekt.


Script B:
=======

PHP:
1
2
3
4
5
6
7
8
9
10
if (getenv('HTTP_X_FORWARDED_FOR')) {
      $ip   = getenv('HTTP_X_FORWARD_FOR');
      $host = gethostbyaddr($ip);
    } else {
      $ip   = getenv('REMOTE_ADDR');
      $host = gethostbyaddr($ip);
   }

echo "$ip";
echo "$host";



Geeft als uitvoer: "[mijnip]" "[mijnhostnaam]" (eigenlijk hetzelfde als script A)


Script C:
=======

PHP:
1
echo $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];


Geeft als uitvoer: warning: Undefined index: HTTP_X_FORWARDED_FOR.
Maar wat houdt deze warning eigenlijk in??

  • bloody
  • Registratie: Juni 1999
  • Laatst online: 22:48

bloody

0.000 KB!!

Geeft als uitvoer: warning: Undefined index: HTTP_X_FORWARDED_FOR.
Maar wat houdt deze warning eigenlijk in??
dat betekent dat HTTP_X_FORWARDED_FOR NIET in de headers meegestuurd is.
dus je moet eerst checken of ie wel bestaat met bv isset();

nope


  • LeMerchant
  • Registratie: Februari 2002
  • Laatst online: 22-07-2020

LeMerchant

Da's tochnie normaaaaal!

Topicstarter
bloody schreef op 09 september 2002 @ 15:08:
[...]


dat betekent dat HTTP_X_FORWARDED_FOR NIET in de headers meegestuurd is.
dus je moet eerst checken of ie wel bestaat met bv isset();
Ok heb ik gedaan:

PHP:
1
2
3
if(isset($HTTP_SERVER_VARS ['HTTP_X_FORWARDED_FOR'] )){
}
echo $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'];


maar nogsteeds dezelfde warning

  • bloody
  • Registratie: Juni 1999
  • Laatst online: 22:48

bloody

0.000 KB!!

LeMerchant schreef op 09 september 2002 @ 15:33:
[...]


Ok heb ik gedaan:

PHP:
1
2
3
if(isset($HTTP_SERVER_VARS ['HTTP_X_FORWARDED_FOR'] )){
}
echo $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'];


maar nogsteeds dezelfde warning
volgens mij ben je een newbie ;) (no offence)
kijk nog eens GOED naar je haakjes bij de if....

nope


  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 07-08 04:17

Fatamorgana

Fietsen is gezond.

bloody schreef op 09 september 2002 @ 15:36:
kijk nog eens GOED naar je haakjes bij de if....
En dan vooral tussen de accolades, of liever gezegd wat er NIET tussen staat.

Verwijderd

Fatamorgana schreef op 09 september 2002 @ 15:40:
[...]

En dan vooral tussen de accolades, of liever gezegd wat er NIET tussen staat.
:)
ik vind jouw icon hier wel heel goed bij passen.

  • LeMerchant
  • Registratie: Februari 2002
  • Laatst online: 22-07-2020

LeMerchant

Da's tochnie normaaaaal!

Topicstarter
euh oke zo dan:

PHP:
1
2
3
if (isset($HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'] )){
echo $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'];
}


en nu krijg ik helemaal geen uitvoer...m.a.w. kzie et gastenboek en de berichtjes en alles wel maar geen IP nummers oid. Maar als ik dit doe:

PHP:
1
2
3
4
if (isset($HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'] )){
echo $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'];
}
echo "$HTTP_SERVER_VARS";


dan geeft dat als uitvoer : "Array"

Verwijderd

Ja, dat lijkt me logisch. HTTP_SERVER_VARS is een array, dus dan kan kloppen. Je kunt makkelijk de inhoud van die array nalopen met print_r($HTTP_SERVER_VARS);
Je kunt nu controleren of HTTP_X_FORWARDED_FOR er in voorkomt.

Overigens zal dat meestal niet zo zijn (tenminste, bij mij niet). Je kunt natuurlijk checken of HTTP_X_FORWARDED_FOR bestaat, zo niet, dan neem je REMOTE_ADDR.

edit:
Je zit het trouwens toch niet op je eigen computer te testen hè?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

HTTP_X_FORWARDED_FOR kun je trouwens wel gebruiken, maar beschouw het niet als universele waarheid.
De variabele is namelijk eenvoudig te manipuleren door de client.
Een veelgemaakte fout is HTTP_X_FORWARDED_FOR loggen ipv. REMOTE_ADDR als de eerste gevuld is.
Door deze constructie kan een potentiele aanvaller de logging van zijn ip verhinderen of veranderen.

Who is John Galt?


  • LeMerchant
  • Registratie: Februari 2002
  • Laatst online: 22-07-2020

LeMerchant

Da's tochnie normaaaaal!

Topicstarter
Verwijderd schreef op 09 september 2002 @ 17:12:
Ja, dat lijkt me logisch. HTTP_SERVER_VARS is een array, dus dan kan kloppen. Je kunt makkelijk de inhoud van die array nalopen met print_r($HTTP_SERVER_VARS);
Je kunt nu controleren of HTTP_X_FORWARDED_FOR er in voorkomt.

Overigens zal dat meestal niet zo zijn (tenminste, bij mij niet). Je kunt natuurlijk checken of HTTP_X_FORWARDED_FOR bestaat, zo niet, dan neem je REMOTE_ADDR.

edit:
Je zit het trouwens toch niet op je eigen computer te testen hè?
Ja et spul staat allemaal op mn eigen pc en daar test ik ook op...

Verwijderd

LeMerchant schreef op 09 september 2002 @ 22:51:
[...]


Ja et spul staat allemaal op mn eigen pc en daar test ik ook op...
Tja, dan zul je 127.0.0.1 wel vaak krijgen inderdaad. Dit is namelijk localhost, je eigen pc dus.

  • LeMerchant
  • Registratie: Februari 2002
  • Laatst online: 22-07-2020

LeMerchant

Da's tochnie normaaaaal!

Topicstarter
ja precies...maar moet ik dan al et spul op een andere pc zetten en dan vannaf deze pc de site gaan benaderen/testen?

Verwijderd

Je zou een testscriptje kunnen maken wat gewoon even REMOTE_ADDR en HTTP_X_FORWARDED_FOR weergeeft, dan weet je hoe het op de toekomstige server is.

Aangezien je nu lokaal werkt krijg je uiteraard als REMOTE_ADDR je eigen ip (en ook localhost). HTTP_X_FORWARDED_FOR heeft dan geen waarde, want er zit geen proxy of wat dan ook tussen. Waarschijnlijk kun je op je toekomstige server ook gewoon REMOTE_ADDR gebruiken, maar zoals gezegd, test dat even, dan weet je 't zeker.
Succes.

  • raphidae
  • Registratie: Februari 2001
  • Laatst online: 06-01-2025

raphidae

...antichrist...

Ik heb dit ooit bij de hand gehad:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// error_reporting(0);

flush();

$forwardfor = explode(",", $_SERVER["HTTP_X_FORWARDED_FOR"]);
$forwardforip = trim(array_shift($forwardfor));
$cascadeproxyip = trim(array_pop($forwardfor));
$forwardforhost = @gethostbyaddr($forwardforip);
$remoteip = trim($_SERVER["REMOTE_ADDR"]); 
$remotehost = @gethostbyaddr($remoteip);
if ($cascadeproxyip)
{
  $proxyip = $cascadeproxyip;
  $proxyhost = gethostbyaddr($cascadeproxyip);
}
else
{
  $proxyip = $remoteip;
  $proxyhost = $remotehost;
}
if ($forwardforip != "") 
{
  print "NOTE: Proxy connection detected\n\n";
  print "NOTE: First proxy in possible chain is $proxyip (host: $proxyhost)\n\n";
  print "NOTE: Client is $forwardforip (host: $forwardforhost)\n\n";
  if (isprivate($forwardforip))
  {
    print "NOTE: Client IP address is a private address, using proxy ip for scanning\n\n";
    $scanhost = $proxyhost;
  }
  else 
  {
    $scanhost = $forwardforhost;
  }
}
else
{
  print "NOTE: Client IP address is $remoteip (host: $remotehost)\n\n";
  $scanhost = $remotehost;
}
print "Starting scan of $scanhost...\n\n";

echo("\n\ndone...");


function isprivate ($ip) {
  $ipoctets = split("[.]", $ip);
  if ($ipoctets[0] == "10") {return true;}
  if ($ipoctets[0] == "192" && $ipoctets[1] == "168") {return true;}
  if ($ipoctets[0] == "172")
  {
    for ($i=16;$i<=31;$i++) 
    {
      if ($ipoctets[1] == $i) {return true;}
    }
  }
  return false;
}


Het tricky is dat HTTP_X_FORWARDED_FOR meerdere IP's kan bevatten gescheiden door komma's, voor als je bijvoorbeeld door meerdere proxies heen tunnelt. Verder heb je ook proxies die HTTP_X_FORWARDED_FOR de waarde " " geven etc.

Iig, aan het einde bevat $scanhost het eerste niet-private IP adres vanaf de client gezien (voorzover het in de headers zit). Dit heb ik gedeeltelijk ff uit een van mijn schriptjes getrokken, dus ik weet niet of het zo werkt. Misschien een missende } ergens :)

Veel plezier.

Every morning is the dawn of a new error.


  • LeMerchant
  • Registratie: Februari 2002
  • Laatst online: 22-07-2020

LeMerchant

Da's tochnie normaaaaal!

Topicstarter
kep ff dit gedaan:

PHP:
1
print_r($HTTP_SERVER_VARS);


Maar HTTP_X_FORWARDED_FOR staat er niet bij. Betekent dit dat ik uberhaupt geen gebruik kan maken van HTTP_X_FORWARDED_FOR ??


edit:

Gaat ff met dat een script van Raphidae pielen


Na et pielen:

Okeej hij gaf dus mijn eigen ip weer en mn hostname...maar kreeg wel :
Warning: Undefined index: HTTP_X_FORWARDED_FOR (Weer die ene warning dus) . Ligt er eraan dat ik dit niet bij apache heb ingesteld? (zoja hoe stel ik dit uberhaupt in??) Of ligt het eraan dat ik lokaal aanet testen ben en et wel zou werken als ik de hele zooi op een aparte pc zet (servertje dus) en vannaf deze pc ga testen (client) of iemand anders op internet et laat testen??

Verwijderd

LeMerchant schreef op 09 september 2002 @ 23:27:
kep ff dit gedaan:

PHP:
1
print_r($HTTP_SERVER_VARS);


Maar HTTP_X_FORWARDED_FOR staat er niet bij. Betekent dit dat ik uberhaupt geen gebruik kan maken van HTTP_X_FORWARDED_FOR ??


edit:

Gaat ff met dat een script van Raphidae pielen


Na et pielen:

Okeej hij gaf dus mijn eigen ip weer en mn hostname...maar kreeg wel :
Warning: Undefined index: HTTP_X_FORWARDED_FOR (Weer die ene warning dus) . Ligt er eraan dat ik dit niet bij apache heb ingesteld? (zoja hoe stel ik dit uberhaupt in??) Of ligt het eraan dat ik lokaal aanet testen ben en et wel zou werken als ik de hele zooi op een aparte pc zet (servertje dus) en vannaf deze pc ga testen (client) of iemand anders op internet et laat testen??
Zoals je net al gemerkt hebt staat hij er niet bij in de server-vars. Op zo'n moment bestaat ie gewoon niet en moet je gewoon REMOTE_ADDR gebruiken.

  • raphidae
  • Registratie: Februari 2001
  • Laatst online: 06-01-2025

raphidae

...antichrist...

Ehm, dat script werkt bij mij wel gewoon. Ook al bestaat HTTP_X_FORWARDED_FOR niet.

Every morning is the dawn of a new error.


  • raphidae
  • Registratie: Februari 2001
  • Laatst online: 06-01-2025

raphidae

...antichrist...

Kijk ook eens naar de HTTP_VIA var. Die gebruiken sommige proxies ook, maar die is wat lastiger te parsen omdat er comment fields in kunnen zitten; dus ff RFC lezen :)

Anyway, probeer eens via een proxy naar dat script te gaan en kijk of ie de proxy ziet, zo ja dan heb jij gewoon een versie PHP die gaat zeiken als die index niet bestaat (is volgens mij ook een optie voor om alles strict te doen), dus gooi er ff een check tussen.

Zo nee, dan heb je safe mode aan of iets dergelijks, want in apache kan je die bende volgens mij niet eens uitzetten.

Every morning is the dawn of a new error.


  • LeMerchant
  • Registratie: Februari 2002
  • Laatst online: 22-07-2020

LeMerchant

Da's tochnie normaaaaal!

Topicstarter
euh....dit gaat me ff weer te ver :?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Owkay laten we het even duidelijk stellen: Jij test je site op je eigen PC. Je verkeer gaat dus niet over het net (en misschien via een proxy) maar via je local loopback --> Dus hoe kan HTTP_X_FORWARDED_FOR dan een waarde hebben?

Als je wilt gaan testen moet je via een proxy het internet op en dan de boel even aanspreken met een extern IP (of hostname)

  • LeMerchant
  • Registratie: Februari 2002
  • Laatst online: 22-07-2020

LeMerchant

Da's tochnie normaaaaal!

Topicstarter
Glimi schreef op 10 september 2002 @ 07:47:
Owkay laten we het even duidelijk stellen: Jij test je site op je eigen PC. Je verkeer gaat dus niet over het net (en misschien via een proxy) maar via je local loopback --> Dus hoe kan HTTP_X_FORWARDED_FOR dan een waarde hebben?

Als je wilt gaan testen moet je via een proxy het internet op en dan de boel even aanspreken met een extern IP (of hostname)
aha, dus als ik (zoals ik al eerder zei) alles op een andere pc zet en weer iemand anders op het net het laat testen, dan zou et moeten werken? (of via deze pc die dan de client wordt, kan dat ook?) Maar ik denk dat ik dan nog steeds die ene waring:Warning: Undefined index: HTTP_X_FORWARDED_FOR of komt dat misschien omdat 'ie nu geen waarde krijgt zoals je al zei? Wantja...dan moet ik maar ff een pc hier gereed gaan maken :)
Pagina: 1