[PHP]lista plików ale nie wyżej niż skypt

0

jak zabezpieczyć tę funkcję by nie można było wyświetlic listy plików z katalogu wyżej niż znajduje się skrypt [???]

function pobierz_pliki($folder) {
   if(!is_dir($folder)) return false;
   $uchwyt = opendir($folder);
   while(false !== ($plik = readdir($uchwyt)))  
     if(is_dir($folder."/".$plik))
       $tab_folderow[] = $plik;
     else
       $tab_plikow[] = $plik;
   closedir($uchwyt);
   sort($tab_folderow); sort($tab_plikow);
   return array_merge($tab_folderow, $tab_plikow);
}

  if( isset( $_GET['dir'] ) && $_GET['dir'] != NULL ) {
    $lista_plikow = pobierz_pliki( $_GET['dir'] );
   else {
    $lista_plikow = pobierz_pliki( "." );
  }
echo join( "<br>", $lista_plikow);
0

ja bym na poczatku dal $folder=('..','X',$folder);
a w funkcji generowania listy wywalilbym folder '..', a na koniec przy wyswietlaniu dodal ten folder (..), lecz wskazujacy nie na /jakis/tam/folder/../, lecz /jakis/tam/ (trzeba sie pobwawic z substr, strrpos itp)

0

Ja bym cos podobnego, a jednak inaczej - sprawdzil bym, czy pierwsza litera to "." lub "/" jesli tak, to funkcja sie nie wywoluje (lub drukuje jakis komunikat).
Potem bym sprawdzil czy w calym stringu znajduje sie "/." - zabezpieczenie przeciwko takim sciezka jak "jakis/../../folder/.." (która takze prowadzi "wyzej" niz skrypt). I tak samo, jesli znalazl, to funkcja nie dziala, lub generuje jakis komunikat.

0

tja ...
po prostu w funkcji pobierz_pliki po linijce z is_dir wpisz kod:

   $tutaj = realpath('./');
   $tam = realpath($folder);
   if(strpos($tam, $tutaj) !== 0) return Array();

//dop: o sorry, w jednej sytuacji to nie zadziała, daj tak:

  $tutaj = str_replace('\\','/',realpath('./') . '/');
  $tam = str_replace('\\','/',realpath($folder) . '/');
  if(strpos($tam, $tutaj) !== 0) return Array();

do postów poniżej - wbrew pozorom zamiana ścieżki względnej na bezwzględną ręcznie to nie jest takie proste zadanie - realpath to robi, a pod windą można stworzyć nawet nazwę z dziesięcioma kropkami w nazwie, poza tym kombinowanie samemu z substr itp nie umożliwi sprawdzenia czy folder "/www/folder" to to samo co "../folder" i to samo co "./", a trzeba wziąć pod uwagę jeszcze że jedna kropka to aktualny folder, dwie to jeden stopień wyżej, trzy to dwa stopnie wyżej, jednym słowem nie warto kombinować

0
Mandrek napisał(a)

Ja bym cos podobnego, a jednak inaczej - sprawdzil bym, czy pierwsza litera to "." lub "/" jesli tak, to funkcja sie nie wywoluje (lub drukuje jakis komunikat).
Potem bym sprawdzil czy w calym stringu znajduje sie "/." - zabezpieczenie przeciwko takim sciezka jak "jakis/../../folder/.." (która takze prowadzi "wyzej" niz skrypt). I tak samo, jesli znalazl, to funkcja nie dziala, lub generuje jakis komunikat.

gratuluję pomysłu a co będzie jeżeli mamy folder o nazwie "..test"
albo ".test" używanie kropek w nazwach plików i folderów jest jak najpardziej dozwolone, więc taki folder zostaje potraktowany po macoszemu :P

0

sry :P nie wiedzialem, pod windą nie można tworzyc, a pod linem poprsotu nie próbowałem ;P

0

Pod Windows nie mozna tworzyć? Z jedną kropką da się na pewno, z dwoma za moment spróbuję. Przypuszczam, że się da.

// Da się. copy con ..txt zadziałało bez problemu :)

0

Pod Xp'kiem nie mozna tworzyc folderów, zawierających "/" w nazwie (a wiec i "/." o którym pisalem ). Kropki w Xp'ku nie moze byc na poczatku.

Pod linami takze nie moze byc folderu z "/" w nazwie, bo to poorostu subfolder :P Jesli do dotkowo tak jak w winzgrtozie, nie moze byc "." na poczatku nazwy, to dobrze jest sprawdzac "/." w stringu. Jak nie, to mozna szukac "/../" lub "/./" Jesli ktory kolwiek z tych istnieje - sciezka jest juz watpliwa.

;P

0

w żadnym systemie Windows/-NT/Linux nie może być "" lub "/" w nazwie, ale nikt o tym nie pisał tylko o kropce która może być też w każdym z tych systemów, więc "/." może wystąpić w ciągu "c:/windows/.nazwa.txt"

0

Przykro mi, na XP'ku nie wchodzi utworzenie katalogu ".Nowy katalog". ;P Pod lina sie da, teraz sprawdzilem.

0

Da się. Właśnie utworzyłem w moim folderze domowym katalog .test :)

E:\Marcin>md test

E:\Marcin>ren test .test

E:\Marcin>dir
 Wolumin w stacji E to MARCIN
 Numer seryjny woluminu: 2A3A-08F2

 Katalog: E:\Marcin

2003-11-19  01:31    <DIR>          .
2003-11-19  01:31    <DIR>          ..
[...]
2005-10-24  14:46    <DIR>          .test
               0 plik(ów)               0 bajtów
              16 katalog(ów)   8 323 235 840 bajtów wolnych
0

Uuu, no patrz, na konsoli sie da :|

W takim razie
[browar]

0
Mandrek napisał(a)

sry :P nie wiedzialem, pod windą nie można tworzyc, a pod linem poprsotu nie próbowałem ;P

a to nowość nie wiedziałem że pod windą nie można tworzyć katalogów zaczynających się od kropki i pewnie dlatego przed 10s utworzyłęm takowy na pulpicie. faktem jest że explorer windy nie pozwala na takie coś ale od czego jest chociażby total cmd?? można tworzyć katalogi z kropką i basta :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1