webForumDet fria alternativet

Skydda kataloger

PHPur PHP

13 svar · 232 visningar · startad av cmk

Medlem sedan mars 2001325 inlägg
Frågan#1

Håller på med ett bildscript som listar alla bilder i en mapp. Mappen anger man via querystring. Hur kan jag fixxa så att man inte kan gå för högt upp i katalogstrukturen?

Mvh Martin

Medlem sedan mars 2001185 inlägg
#2

använd den *lägsta* mappen som grund för de andra:

$mapp = opendir("/bla.../bilder$mapp");

där url till sidan blir: bilder.php?mapp=/porr (exempel :e)

[Redigerat av SuPeR_ToBBe den 06 okt 2001]

Medlem sedan mars 2001325 inlägg
#3

SuPeR_ToBBe: Men vad händer om man skickar tex. "../../../mega-super-hemlig-mapp/" i variabeln $mapp? Då går väl funktionen upp ändå i katalogträdet eller?

RED: Stavfel :(
/Martin

------------------
[silver]Keep on rocking 24-7[/silver]

[Redigerat av cmk den 06 okt 2001]

Medlem sedan jan. 20001 006 inlägg
#4

Har du tillgång till php.ini kan du använda open_basedir.

/j

Medlem sedan mars 2001325 inlägg
#5

Batboy: Jo, här hemma har jag ju det men förmodligen inte senare. :(

Inga andra bra ideér?

/ Martin

------------------
[silver]Keep on rocking 24-7[/silver]

Medlem sedan juni 20008 205 inlägg
#6
if(strstr($mapp, '..'))
echo "skit ner dig";
else
do_it($mapp);

------------------
And remember, when you look into the pit, the pit looks back into you. /Anonymous INTERCAL hacker

Medlem sedan mars 2001325 inlägg
#7

spango: Hur säkert blir det då? Det finns inga andra sätt att komma upp i katalogstrukturen än att skriva "../" eller?
Tack.

/M

Medlem sedan juni 20008 205 inlägg
#8

Inte vad jag vet, i alla fall.

------------------
And remember, when you look into the pit, the pit looks back into you. /Anonymous INTERCAL hacker

Medlem sedan feb. 20001 050 inlägg
#9

Jo, spangos kod "suger" (ledsen, spango :) ). Spangos kod går att komma runt genom att skriva . och / med dess "unicode" (eller extended unicode?) motsvarighet. Prova tex:
http://cgi.webforum.nu/wfcgi/../
http://cgi.webforum.nu/wfcgi/../

som båda leder till samma webbsida.

/nicclas - www.nyhetsrubriker.com

/nicclas

Medlem sedan mars 2001325 inlägg
#10

nicclas: Har du möjligtvis några andra förslag? :)

/ Martin

------------------
Keep on rocking 24-7

Medlem sedan feb. 20001 050 inlägg
#11

Kanske det...
Under förutsättning att du vet vilka kataloger som finns så kan du kolla att "sökvägarna" som anges endast är till dessa kataloger, och inga andra. Dvs finns under-katalogen "mappen/" och "guld/" så får du helt enkelt prova om den angivna query-strängen endast innehåller orden "mappen/" eller "guld/".

[Redigerat av nicclas den 07 okt 2001]

Medlem sedan juni 20008 205 inlägg
#12

Hallå där! %2E är inte unicode för punkt, det är url-koden. Url-koden avkodas av servern, som sedan skickar den till php. Url-kodat exempel, icke url-kodat exempel, källa.

------------------
You can't be young forever, but you can be immature indefinitely.

Medlem sedan feb. 20001 050 inlägg
#13

OK

Medlem sedan juli 200038 inlägg
#14

På valfritt sätt skapar du en lista (eller ett helt filträd) över mappar som är tillåtna att öppna. Innan du sedan öppnar vald mapp kontrollerar du mot denna lista. Väldigt enkelt och inte alls så vackert som det skulle kunna vara:

$allowed[] = "mapp1";
$allowed[] = "mapp2";
$allowed[] = "mapp3";
$allowed[] = "mapp4";
if(isset($dir))
 {
  for($i=0; $i<sizeof($allowed);$i++)
   {
    if($allowed[$i] == $dir)
     {
      $access = "granted";
     }
   }
  if(empty($access))
   {
    unset($dir);
    header("location: index.phtml");
   }
  fortsätt sedan att öppna mappen, lista innehåll, sortera innehåll eller vad som nu önskas...

I annat fall är det väl att rekomendera att använda databas. Det är enligt mig betydligt säkrare än ett filhanteringsscipt som kan "sättas ur spel" på mer sätt än vad man orkar räkna till.

[Redigerat av loriel den 11 okt 2001]

132 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)