gxi Skrevet 24. november 2007 Del Skrevet 24. november 2007 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå