Hallo allemaal,
Ik ben nu al enige tijd bezig geweest om een verzameling scriptjes te schrijven, waarmee ik er voor kan zorgen dat alleen mensen met toegang bepaalde zaken kunnen bekijken. Onder de te beveiligen items vallen ook plaatjes.
Dit laatste is niets moeilijks aan. De plaatjes zelf zet ik 1 directory hoger, met een .htaccess file zodat niets of niemand toegang heeft. daarna een PHP script waarbij er met een variabele in de URL kan worden aangegeven welke file gedownload wordt.
de code:
Dit zeer simpele maar doelmatige scriptje werkt hier goed. Echter 1 probleem.
Onderstaande link zou het gewoon doen, en daar is niks mis mee
https://mijnserver/bepaaldedir/fetchpicture.php?file=gewensteplaatje.jpg
Echter, de onderstaande doet het ook!!!!
https://mijnserver/bepaaldedir/fetchpicture.php?file=../../../../../eendir/anderplaatje.png
Het is dus mogelijk om terug te gaan in de directory structuur!!!
Nu zit ik dus te bedenken hoe ik er voor kan zorgen dat, ALLEEN files in de aangegeven directory, of in een directory binnen die directory kunnen worden opgehaald.
VRAAG: hoe kan ik checken of een pad binnen een bepaalde directory valt
Ik ben nu al enige tijd bezig geweest om een verzameling scriptjes te schrijven, waarmee ik er voor kan zorgen dat alleen mensen met toegang bepaalde zaken kunnen bekijken. Onder de te beveiligen items vallen ook plaatjes.
Dit laatste is niets moeilijks aan. De plaatjes zelf zet ik 1 directory hoger, met een .htaccess file zodat niets of niemand toegang heeft. daarna een PHP script waarbij er met een variabele in de URL kan worden aangegeven welke file gedownload wordt.
de code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <? // ACCESS CONTROL require "CAccessControl.php"; $myCAccessControl_AuthAccessOnly = new CAccessControl(); if(!( $myCAccessControl_AuthAccessOnly->Status_LoggedIn() )) die(); $fetchfile_dir = "./no_access/"; $fetchfile_file = $_GET["file"]; $fetchfile_fullpath = $fetchfile_dir . $fetchfile_file; // CHECK IF FILE EXISTS if(!file_exists($fetchfile_fullpath)) die(); // CHECK IF FILE IS A PICTURE if(!( $imageinfo = getimagesize ($fetchfile_fullpath)) ) die(); // SEND HEADER header("Content-type: " . $imageinfo['mime'] . ""); // SEND FILE readfile($fetchfile_fullpath); ?> |
Dit zeer simpele maar doelmatige scriptje werkt hier goed. Echter 1 probleem.
Onderstaande link zou het gewoon doen, en daar is niks mis mee
https://mijnserver/bepaaldedir/fetchpicture.php?file=gewensteplaatje.jpg
Echter, de onderstaande doet het ook!!!!
https://mijnserver/bepaaldedir/fetchpicture.php?file=../../../../../eendir/anderplaatje.png
Het is dus mogelijk om terug te gaan in de directory structuur!!!
Nu zit ik dus te bedenken hoe ik er voor kan zorgen dat, ALLEEN files in de aangegeven directory, of in een directory binnen die directory kunnen worden opgehaald.
VRAAG: hoe kan ik checken of een pad binnen een bepaalde directory valt
[ Voor 13% gewijzigd door Bart B op 25-09-2003 22:19 ]