Gå til innhold

$_GET, $_SERVER


Anbefalte innlegg

Jeg har lurt på en ting. Når jeg f.eks. skal hente variabler fra et skjema som er sendt, hvorfor bruker man ofte $_GET['navn'] da? Hvorfor ikke bare bruke $navn ?

Og jeg ser ofte f.eks. $_SERVER['HTTP_USER_AGENT']. Hvorfor ikke bare bruke $HTTP_USER_AGENT ?

Bare lurer :roll:
Lenke til kommentar
Videoannonse
Annonse
Hvorfor bruker man ofte $_GET['navn'] da? Hvorfor ikke bare bruke $navn ?

Hvis du har register_globals skrudd på i php.ini , kan du godt hoppe over $_GET. I Noen versjoner av PHP (gamle versjoner og nye versjoner som har det skrudd på) så kan du få tak i innholdet direkte med $var, dette er fjernet som standard i nye versjoner av php fordi det kan være usikkert.

Lenke til kommentar

Eksempel:

 

www.domene.no/hei.php?til=trygve&fra=andreas

 

Problem:

Hvordan får jeg hei.php til å vise "trygve" som f.eks. $hei_til og "andreas" som $hei_fra?

 

Løsning:

Det kommer litt ann på hvordan PHP er satt opp, men uansett så kan du få tak

i det via $_GET og $_POST, i ditt eksempel vil $_GET['til'] inneholde trygve

og $_GET['fra'] inneholde andreas. Dette er fordi du bruker GET metoden til

å få taki siden, når du bruker forms kan du også bruke POST da vil innholdet

ligge i $_POST. I Noen versjoner av PHP (gamle versjoner, og nye versjoner

som har det skrudd på) så kan du få taki innholdet direkte med $til og $fra,

dette er fjernet som standard i nye versjoner av php fordi det kan være

usikkert. Så om du skal sette $hei_til og $hei_fra så blir det:

 

$hei_til = $_GET['til'];

$hei_fra = $_GET['fra'];

 

eller om du har register_globals skrudd på i php.ini så kan du bruke:

 

$hei_til = $til;

$hei_fra = $fra;

 

Det øverste eksempelet vil alltid fungere og det er vel kanskje best

sikkerhetsmessig også.

 

 

PS:

Dette er kopiert fra en mail jeg fikk for lenge siden da jeg lærte om GET og POST. Så Martin, hvis du er her, tusen takk

:thumbs:

Lenke til kommentar

Anbefaler å slå av register_globals. Og det er ikke rare greiene du må gjøre for å øke sikkerheten betraktelig.

Hvis du vil hente noe fra _GET f.eks, men ikke vil skrive inn $_GET['variabel'] hver gang kan du jo bare ligge inn følgende i scriptet:

$variabel = $_GET['variabel'];

Lenke til kommentar

Det er sikkerhetsmessige hensyn at register globals nå default er off, men det er i utgangspunktet ikke så store problemer å "skru den på". Kanskje det "største" problemet med register globals er at den er off på de fleste webhoteller - så det kan hende at du må skrive om deler av scriptet ditt.

 

Ved å bruke $_GET, $_POST eller $_REQUEST så ser du også lett hvor variablene kommer fra.

Lenke til kommentar

Jeg anbefaler på ingen måte å bruke $_REQUEST da det kan skape visse sikkerhetshull.

Crackere kan da bruke GET istedenfor POST for å utføre visse operasjoner bare POST skal kunne gjøre.

La oss si du har en database. Og du har laget et lite skjema du må logge inn som admin for å få tilgang til. Via det skjemaet kan du slette en bruker, og du bruker $_POST i en liten form.

Hvis da en cracker prøver seg, uten å behøve innlogging, å skrive http://www.webadress.com/deleteuser.php?id=666

Hvis du da bruker $_REQUEST istedenfor $_POST vil dette bli oppfattet på samme måte som om du var logget inn og skrev fra et skjema.

 

Anyway... Liten risiko, men det er mye mer oversiktlig å bruke $_GET og $_POST.

Lenke til kommentar

Toolshed: GET og POST er like usikre. om et skript får inn variable fra POST eller GET er likedyldig for skriptet. selve prosessen å sende en HTTP request med et par parametere i URL'en er like enkel/komplisert som å sende som content i en POST request.

 

de crackerne som er begrenset til sin egen nettleser for å cracke siden din, er ikke de crackerne du skal være redd for.

 

lag heller skriptet ditt med god nok feilsjekking slik at du unngår at variablene du tar inn kan misbrukes på noen som helst måte. hvis du ikke har det til å begynne med, kan du uansett ikke være sikker.

 

jeg har cracket/snust på flere sider vha å sende egne POST requests...

Lenke til kommentar
Hvis da en cracker prøver seg, uten å behøve innlogging, å skrive http://www.webadress.com/deleteuser.php?id=666

Hvis du da bruker $_REQUEST istedenfor $_POST vil dette bli oppfattet på samme måte som om du var logget inn og skrev fra et skjema.

dette er bare tull, unnskyld meg. hvis du først har innlogging, skal du selvsagt sjekke at du er innlogget i deleteuser.php også, uavhengig av hva som måtte finnes i $_GET og $_POST array'ene.

Lenke til kommentar
Jeg anbefaler på ingen måte å bruke $_REQUEST da det kan skape visse sikkerhetshull.

Crackere kan da bruke GET istedenfor POST for å utføre visse operasjoner bare POST skal kunne gjøre.

La oss si du har en database. Og du har laget et lite skjema du må logge inn som admin for å få tilgang til. Via det skjemaet kan du slette en bruker, og du bruker $_POST i en liten form.

Hvis da en cracker prøver seg, uten å behøve innlogging, å skrive http://www.webadress.com/deleteuser.php?id=666

Hvis du da bruker $_REQUEST istedenfor $_POST vil dette bli oppfattet på samme måte som om du var logget inn og skrev fra et skjema.

 

Anyway... Liten risiko, men det er mye mer oversiktlig å bruke $_GET og $_POST.

Skjønner ikke helt hva du mener?

Bygger en så svak logginn funksjon så er det ikke $_GET, $_POST eller $_REQUEST som er sikkerhetsproblemet. Du må ALLTID kontrollere variabler fra en bruker - uavhengig av hvilken method du bruker. Scriptet blir ikke sikrere om du ikke bruker REQUEST.

 

Videre så skjønner jeg ikke helt sammenhengen med at de kan bruke $_GET og ikke $_REQUEST? Hva mener du der?

 

Du burde ikke fraråde noe før du er sikker på hvordan det fungerer!

Lenke til kommentar
Og jeg ser ofte f.eks. $_SERVER['HTTP_USER_AGENT']. Hvorfor ikke bare bruke $HTTP_USER_AGENT ?

Hva med dette da?

Jeg er nødt til å bruke $_SERVER på min server, tror det har noe å gjøre med at register_globals er off..

Lenke til kommentar
...Kanskje det "største" problemet med register globals er at den er off på de fleste webhoteller - så det kan hende at du må skrive om deler av scriptet ditt.

Det samme gjelder alle PHP Superglobals ($_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE osv).

 

Merk at det er sjanse for at f.eks. $HTTP_USER_AGENT og de andre long predefined variable arrays vil bli disabeld i PHP5.

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...