Gå til innhold

Obs! IP-adresselagring basert på X-FORWARDED-FOR


Anbefalte innlegg

Jeg ser ofte at det blir brukt script som skal lagre IP-adresse, men tar hensyn til HTTP-headeren X-FORWARDED-FOR. Et eksempel på et slikt script (dette er ikke reelt, men noe jeg har skrevet som et eksempel):

<?php
 function getIpAddress() {
if ($ip = $_SERVER['HTTP_X_FORWARDED_FOR']) {
  return $ip;
}
return $_SERVER['REMOTE_ADDR];
 }
?>

 

Greia med et slikt script er at dersom det følger en HTTP-header med navn X-Forwarded-For med spørringen til webbserveren, så blir dette IP-adressen som returneres av funksjonen (og dermed lagres i en evt. database). Dersom det ikke er noen X-Forwarded-For, så brukes IP-adressen til den tilkoblede klienten.

 

Så, spørsmålet er vel kanskje: Hva er egentlig denne X-Forwarded-For?

X-Forwarded-For er en header som settes av en eventuell HTTP-proxy. Denne skal inneholde IP-adressen til klienten som koblet til proxien. Dette er altså en måte å hente IP-adressen til klienten på dersom tilkoblingen går via en proxy (siden proxyen vil koble til serveren med sin egen IP-adresse).

 

Merk at jeg har uthevet ordet "eventuell", og det gjør jeg fordi i de aller fleste tilfeller er det ingen proxy. Samtidig kan jo hvem som helst sette opp en proxy. Det betyr at det er faktisk klienten som bestemmer hvilken IP-adresse som evt. kan stå i denne headeren. En normal nettleser vil aldri sette denne headeren, men det betyr ikke at ingen kan det.

 

Eksempel på en tilkobling som vil gi IP-adressen 127.0.0.1 i databasen dersom siden brukte den funksjonen jeg skrev over for å hente adressen:

telnet dcvhost.no 80
GET / HTTP/1.1
Host: dcvhost.no
X-Forwarded-For: 127.0.0.1

 

Her har jeg laget en effektiv måte basert på telnet å faktisk bestemme hvilken IP-adresse som evt. skulle blitt lagret i databasen. Dette krever selvsagt at siden bruker et script som nevnt over.

 

Så, her er scriptet du skal bruke :)

<?php
 function getIpAddress() {
return $_SERVER['REMOTE_ADDR'];
 }
?>

... det enkle er ofte det beste.

 

Man kan selvsagt gjøre ting avansert og tungvindt, og lagre begge, men aldri bare èn av dem dersom dette ikke er $_SERVER['REMOTE_ADDR']

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...