Guide:

Sikker bruk av include-script

Bruken av dynamiske include-script har tatt seg opp voldsomt i det siste, siden flere og flere får snusen på hva noen korte PHP-snutter kan gjøre for å forenkle driften av deres hjemmeside. Det mange ikke tar med i beregningen er hvor lett et slikt script kan lures til å hente ondsinnete filer, eller i verste fall ta over hele systemet. Det skal vi prøve å ta et lite oppgjør med her.

Hva er et include-script?

Et include-script er en liten kodesnutt i PHP som gir en webside noen av de fordeler frames gav uten de samme ulempene. Man kan ha designet sitt (HTML og CSS) i en fil, og bruke include-scriptet til kun å få tak i innholdet, som befinner seg i separate filer. Dermed oppnås en nesten total atskillelse av design og innhold. Slik unngår man problemer hvis man skal redesigne en side med mange undersider, og man kan også laste opp nytt innhold uten å måtte ta ned forsiden.

Include-script finnes i to varianter; dynamiske og statiske. Førstnevnte er mest aktuelt for de fleste, siden det ikke krever endring av førstesiden og include-scriptets kode for å laste opp en ny side. Dynamiske include-script er også farligst, siden det lett kan lures til å hente en hvilken som helst annen fil, og dermed kan man risikere å få uønsket besøk på serveren.

Statiske include-script er mer eller mindre skuddsikre, men mangler mye av den funksjonaliteten dynamiske include-script gir. Et statisk include-script henter bare inn forhåndsdefinerte filer uten mulighet for brukerpåvirkning av hva som hentes. Derfor føler vi det ikke er noe behov for å ta det opp her.

Hvordan

Et include-script benytter seg av - og har blitt navngitt etter - en PHP-funksjon som benyttes til å inkludere filer i andre filer. Den funksjonen benyttes ofte i sammenheng med den superglobale variabelen $_GET[]. En superglobal variabel er en variabel som er tilgjengelig overalt i koden, og også overalt på webtjeneren. Når man holder på med superglobale variabler, bør man være meget forsiktig, men det er ikke alle som helt tenker over farene.

$_GET[] kan brukes bl.a. til å hente data fra adresselinjen. Du har sikkert sett sider som har brukt dette før, med adresser som http://www.programmer.no/art.php?artikkelid=8764, som faktisk er adressen til nettopp denne artikkelen. Som du kan se er programmer.no en av sidene som benytter seg av dette. Et enkelt include-script kan se slik ut:

include "$_GET['s'].php">;

Funksjonen include henter altså det som kommer etter bokstaven "s" i URL-en, og legger til en filendelse. Deretter inkluderes filen i scriptet.

Include-scriptet vil da inkludere hvilken som helst fil brukeren spesifiserer i URL-en. Hvis URL-en er index.php?s=articles, inkluderes filen articles.php. Dette kan misbrukes, ved bl.a. å skrive "../", som indikerer at filen befinner seg en mappe lengre oppe i hierarkiet. Hvis URL-en er index.php?s=../slemfil.php, inkluderes filen slemfil.php, som ligger en mappe lenger oppe. Dette kan i verste fall brukes til å inkludere en fil fra andre brukere på serveren, noe som kan gjøre at en ondsinnet inntrenger kan få uautorisert tilgang til serveren.