Avatar billede styrk Nybegynder
20. marts 2010 - 15:48 Der er 4 kommentarer

Directory listing - sikkerhedsspørgmsål

Hej.

Jeg har lavet et simpelt directory-listing-script, vha. scandir. Man kan navigerer sig frem og tilbage i mapperne.

Problemet er så at man faktisk kan bevæge sig udenfor start mappen, hvilket jeg jo ikke ønsker - f.eks ved at skrive ../ i url'en hvor jeg heletiden kører mappe-stien.

Nogle forslag til hvordan man kan sikre sådan et script?
Avatar billede bufferzone Praktikant
20. marts 2010 - 17:11 #1
Det du beskriver er en klassisk directory traversal sårbarhed der let kan udnyttet til skidt.

Løsningen er input validering, hvor du i dit script forbyder brugerne at bruge de karakterer der kan danne ../ (husk også unicode og andre måder at danne karakterer på.

Du skal ikke forbyde brugen af punktum, kun to punktummer i rækkefølge
Avatar billede repox Seniormester
20. marts 2010 - 21:35 #2
Et forslag (der forudsætter at du naturligvis ikke benytter amatøragtige hosting selskaber der har safe_mode slået til ;) )
$startDir = dirname(__FILE__);

$dir = $startDir."/".$_GET["dir"];
chdir($dir);
if( strlen($startDir) > strlen(getcwd()) )
    die("Du kan ikke komme længere tilbage...");

print_r(glob(getcwd()."/*"));


Det kan måske give dig inspiration...
Avatar billede styrk Nybegynder
23. marts 2010 - 21:08 #3
Tak for svarende. Jeg har ikke lige besluttet mig på en bestemt måde endnu, da stystemet stadig er lukket..

Kunne godt tænke mig lidt flere forslag. :-) (hvis der er flere..)
Avatar billede styrk Nybegynder
23. maj 2012 - 16:16 #4
Hej repox. Din løsning er ganske fin. Besvar venligst..
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester