/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Directory listing - jeg er kørt fast.
Fra : Thomas D


Dato : 27-06-03 12:34

Hej,

Jeg er ved at lave en directory listing men jeg har nogle problemer.
For at gøre den sikker bruger jeg fjerner jeg "/", ".", "../" og "./" fra
$dir.

Scriptet virker helt fint.
Der er bare det problem at jeg ikke kan "dir up". Altså gå til parent dir.
Det er naturligvis pga. den sikkerhedsanordning jeg beskriver ovenfor.

Hvordan kan jeg nu gøre sådan at jeg kan "komme tilbage" til diret ovenfor?

Sourcen er vedhæftet herudner:
---
<HTML>
<HEAD>
<?
$directory = $_REQUEST["dir"]; // lets fetch the variable: REQUEST works for
both, POST and GET methods

if (substr($directory, 0, 1) == "/")
$directory = "";
$directory = str_replace ("./", "", $directory);
$directory = str_replace (".", "", $directory);
if($directory=="dirup") $directory="../";
?>
<TITLE><?=$directory?></TITLE>
</HEAD>
<BODY>
<TABLE cellspacing="0">
<TR>
<TH>Name:</TH>
<TH>Type:</TH>
<TH>Size:</TH>
<TH>Date:</TH>
</TR>
<TR>
<TD><A href="dir.php?dir=<?=$directory?>/../">../ (up)</A></TD>
<TD></TD>
<TD></TD>
<TD></TD>
</TR>
<?
if ($directory != @$null)
{ // lets check if the variable "dir" has something in it, otherwise lets
just print out the empty document
if ($dir = @opendir($directory))
{ // changed "./" to the directory variable
echo ("Listing contents of <b>$directory</b><BR>\n"); // i just
added this thing

while (($file = readdir($dir)) !== false)
{
if ($file != "." && $file != "..")
{
$location = "$directory/$file";
$type = filetype($location);
$size = filesize($location);
if (is_dir($location) == true)
{
?>
<TR>
<TD><a href="dir.php?dir=<?=$location?>"><?=$file?></a></TD>
<TD><?=$type?></TD>
<TD><?=$size?></TD>
<TD></TD>
</TR>
<?

}
else
{
?>
<TR>
<TD><a href="<?=$location?>"><?=$file?></a></TD>
<TD><?=$type?></TD>
<TD><?=$size?></TD>
<TD></TD>
</TR>
<?

}
}
}
closedir($dir);
}
}

?>
</TABLE>
<A href="http://files.peps.dk">files.peps.dk
</BODY>
</HTML>
---


Mvh
Thomas



 
 
Anders K. Madsen (27-06-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 27-06-03 12:52

On Fri, 27 Jun 2003 13:34:24 +0200
"Thomas D" <dinadur@hotmail.com> wrote:

> Hej,
>
> Jeg er ved at lave en directory listing men jeg har nogle problemer.
> For at gøre den sikker bruger jeg fjerner jeg "/", ".", "../" og "./" fra
> $dir.
>
> Scriptet virker helt fint.
> Der er bare det problem at jeg ikke kan "dir up". Altså gå til parent dir.
> Det er naturligvis pga. den sikkerhedsanordning jeg beskriver ovenfor.
>
> Hvordan kan jeg nu gøre sådan at jeg kan "komme tilbage" til diret ovenfor?
>
> Sourcen er vedhæftet herudner:
> ---
[snip]
> if (substr($directory, 0, 1) == "/")
> $directory = "";
> $directory = str_replace ("./", "", $directory);
> $directory = str_replace (".", "", $directory);
> if($directory=="dirup") $directory="../";
> ?>
[snip]
Nu er det ikke lige et svar på det du spurgte om, men jeg synes lige jeg vil
spare dig for besværet med at lede efter denne fejl senere hen...
$directory = str_replace(".", "", $directory);
gør jo at du fjerner _alle_ '.' fra dir-navnet... Også hvis det står inde midt
i navnet... Så hvis du derfor har et dir ved navn: 'noget.backup' f.eks.... Så
vil den fejle.

Mvh.
   Madsen


--
- - - - - - - - - - - - - - + - - - - - - - - - - - - - - +
| Anders K. Madsen
http://lillesvin.linux.dk |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| There are 10 types of people in the world... |
Those who understand binary - and those who don't.
| - http://bash.org |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

Thomas D (27-06-2003)
Kommentar
Fra : Thomas D


Dato : 27-06-03 14:36

nej okay,

det vil jeg lige se på.



Morten Winkler Jørge~ (27-06-2003)
Kommentar
Fra : Morten Winkler Jørge~


Dato : 27-06-03 13:56

> Jeg er ved at lave en directory listing men jeg har nogle problemer.
> For at gøre den sikker bruger jeg fjerner jeg "/", ".", "../" og "./" fra
> $dir.
Sikker i forhold til hvem?
Dit problem er vist at du ikke stoler på din egen evne til at anvende din
egen kode med varsomhed - for nu at sætte tingene på spidsen.

Brugerne af dit website kommer vel ikke til at få lov til at skrive PHP kode
der så skal eksekveres af din webserver, vel?

Mvh.
Morten



Thomas D (27-06-2003)
Kommentar
Fra : Thomas D


Dato : 27-06-03 14:36

> Sikker i forhold til hvem?
> Dit problem er vist at du ikke stoler på din egen evne til at anvende din
> egen kode med varsomhed - for nu at sætte tingene på spidsen.
>
> Brugerne af dit website kommer vel ikke til at få lov til at skrive PHP
kode
> der så skal eksekveres af din webserver, vel?
>

Hmm nej men de kan få lov til at liste dirs som ikke var meningen at de
skulle hvis de går længere op i træet end der var meningen at de skulle.

Mvh
THomas



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408946
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste