[PHP] readdir locken in een bepaalde directory

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
Ik heb de volgende code in elkaar geprutst

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$homedir= './downloads/';
if (!empty($_GET['dir']))
  {
   if ($handle = opendir($homedir . $_GET['dir'])) {
   while (false !== ($file = readdir($handle)))
   {
    if ($file != "." && $file != "..")
    {
     if (is_dir($homedir . $file)) { $tp->newblock('directory'); }
     else { $tp->newblock('file'); }
     $tp->assign('dir',stripslashes($homedir . $_GET['dir']));
     $tp->assign('name',stripslashes(nohtml($file)));
     $tp->gotoblock('downloads');
     }
    }
   }
   closedir($handle);
   }
  }


Nu werkt deze code op zich WEL, maar het feit wil dat je met ../ of ../../ misschien zelfs met ./ in een andere directory kunt kijken, wat dus totaal niet de bedoeling is.

wat ik dus wil is de gebruiker locken in de directory $homedir
is dit mogelijk? en zo ja hoe?

Icons are overrated


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Controleer of er .. voorkomt in $_GET['dir'].

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
nou str_replace('../','',$_GET['dir']); zou wel kunnen, maar ik denk dat er meerdere "grapjes" mogelijk zijn (ik las in een ander topic iets over ~root bijvoorbeeld)

Icons are overrated


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Str_replace zou ik niet doen. Meteen een foutmelding teruggooien als er .. in zet. kan niet anders dan kwade bedoelingen zijn.

Een pad met ~ (en ook met een enkele punt) is alleen een mogelijk als je er mee begint. In jouw geval plak je er telkens een string voor, dus daar kan weinig fout mee.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 16-09 19:01

Tux

Misschien met een regex checken of het wel geldige tekens zijn?

PHP:
1
2
3
4
if (preg_match ("/([a-zA-Z0-9]+)/", $_GET['dir']))
{
   ...
}

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • trogdor
  • Registratie: Mei 2003
  • Laatst online: 22-04 10:17
dus jij hebt nooit spaties , -, +, _ , . , etc etc in je dirnames staan?

Acties:
  • 0 Henk 'm!

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 09:30
je kan toch ook controleren of de homedir voorkomt in de opgevraagde dir? Als dit niet het geval is, zitten ze een dir te hoog

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Tux gebruikt waarschijnlijk de hongaarse notatie 8)

De aanpak van tux, met een regular expression is zeker niet verkeerd, dat lijkt mij beter en vooral veiliger werken dan een enkele str_replace. Is er niet een soort van beveiliging hiervoor ingebouwd in PHP?
Pagina: 1