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
13 svar · 232 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 :e)
[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
------------------
[silver]Keep on rocking 24-7[/silver]
[Redigerat av cmk den 06 okt 2001]
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]
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
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.
------------------
And remember, when you look into the pit, the pit looks back into you. /Anonymous INTERCAL hacker
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
nicclas: Har du möjligtvis några andra förslag? :)
/ Martin
------------------
Keep on rocking 24-7
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.
------------------
You can't be young forever, but you can be immature indefinitely.
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]