28. marts 2004 - 18:23Der er
11 kommentarer og 1 løsning
Jeres råd. Hvordan vil i gøre det her? Tjekke en string
Hey eksperter
I min url står der følgende
index.php?p=vis_mappe&map=pics
Det jeg har lavet er et script som tjekker en mappe igennem for filer. Det eneste jeg mangler er at sikre scriptet så man ikke kan skrive
index.php?p=vis_mappe&map=../../../ og derved komme ud hvor man ikke må være. Jeg har nogenlunde sikret mit script så hvis man skriver
index..php?p=vis_mappe&map= så kommer man til startmappen som jeg vil have.
Det jeg vil sikre er at man ikke kan skrive ../. Hvis man gør det så kommer man til startsiden.
Jeg havde tænkt mig at tage map ned og søge den igennem for ../ men er der en anden måde? Som er mere sikker for du kan jo bare skrive ascii tegn eller andet.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
og så tjekke via in_array(str needle, array haystack) (mind me hvis jeg har byttet rundt) om mappen findes i arrayet over mappe der må lists...
Det er den sikrste måde at lave det på, for hvis en angriber skal kunne liste mapper "under" den mappe man er i skal de første ændre i PHP script og ændre arrayet... Det samme skal du så bare, så hvis du tilføjer mapper skal du også tilføje til arrayet...
Altså jeg kan jo starte med at urlencode den. tegnet / bliver så skiftet ud med %xx tegn og jeg kan derefter søge efter ..
Nu er jeg brugeren som misbruger php.net og jeg har enten drømt eller set at man kan søge en string igennem for matchende ord eller tegn, men jeg kan ikke huske funktionen.
Jeps ved godt hvordan jeg fjerner / osv. Er ike nygebnyder:D Men jeg vil urlencode den så / bliver til ascii og man derefter bare har .. Hvis .. er i den så skal det bevirke at den bare sender en til base igen, altså til den mappe som jeg har sat til at være begynder mappe. Hvis jeg lod være med at gøre noget kunne man jo blive ved med at skifte tilbage i systemet med ../
Jeg kom til at tænke på om jeg ikke kunne bruge .htaccess? Altså min start mappe ligger jo i en mappe og hvis jeg lader min start mappe og undermapperne være åben for alle. MEN den mappe som min start mappe ligger i spærrer jeg så med en .htaccess. Kan jeg ikke også gøre det sådan??
strpos() (som ljm påpeger) returnere false hvis ordet ikke er fundet, søger efter ordet som det er eregi() returnere false hvis mønstret ikke findes - søger via reg.exp.
Kort forklaring, din $secpath kan være "/home/mxs/filer", ereg'en checker at alle stier starter med denne sti, realpath sørger for at fjerne .. osv fra stien og "resolver" til den "ægte" sti.
Undskyld for at jeg ikke har svaret. Faktisk næste 4 år siden :) Nuvel. Sukos, jeg fandt faktisk, i tidernes morgen ud af at coderdks forklaring gav mig en kode, som var mere overskueligt at se på. Dette kan jeg huske, da jeg brugte metoden meget fremover til andre projekter.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.