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 )
[Redigerat av SuPeR_ToBBe den 06 okt 2001]
13 svar · 238 visningar · startad av cmk
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
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 )
[Redigerat av SuPeR_ToBBe den 06 okt 2001]
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
if(strstr($mapp, '..'))
echo "skit ner dig";
else
do_it($mapp);
spango: Hur säkert blir det då? Det finns inga andra sätt att komma upp i katalogstrukturen än att skriva "../" eller?
Tack.
/M
Inte vad jag vet, i alla fall.
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
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]
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.
OK
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]