evt. voor readfile ook nog met header() een contenttype meegeven. zie ook http://php.net/readfile
Waarbij true een controle moet worden of de user ingelogd is.
>> Ik vroeg me af of het mogelijk is om alle bestanden in een directory te beschermen van mensen die niet ingelogd zijn.
Als mensen niet zijn ingelogd, weet je niet zeker wie je voor je hebt en kun je hun bestanden daarom niet goed beveiligen. Wat je het bijvoorbeeld kunt doen:
1. Sla de bestanden op in een directory buiten de root / van de site.
2. Maak in de root bijvoorbeeld een directory /download/ en laat daarin index.php het weergeven en/of downloaden van de bestanden afhandelen. Hier kun je ook de login van gebruikers inbouwen.
En dan doe ik toegangcheck.php?file=./../path/naar/databaseconfig.php en ik zie ineens je database configuratie op mijn scherm staan.
Dat is best aardig.
Op het moment dat je bestanden via een url wilt includen moet je een whitelist gebruiken. Of ze opschonen met bijvoorbeeld [php]pathinfo[/php]
<?php
$file = false;
$path = '/path/waar/de/bestanden/staan/';
if(isset(GET['file'])){
$file = pathinfo(GET['file'],PATHINFO_BASENAME);
if(!file_exists($path . $file)){
$file = false;
}
}
if($file !== false){
//doe iets met het bestand
}else{
//het bestand bestaat niet, doe iets zonder een bestand
}
?>
het voorbeeld is uiteraard niet compleet: een content header ontbreekt ook.
Liever nog dan de parameter file= mee te geven als get-parameter (in een rewrite trouwens)
zou ik gaan voor $_SERVER['REQUEST_URI'] om de aangesproken filename direct te kunnen oppakken.
Daarmee dwing je dan al af dat het om een file in die directory gaat.
// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) {
// For security, start by assuming the visitor is NOT authorized.
$isValid = False;
// When a visitor has logged into this site, the Session variable MM_Username set equal to their username.
// Therefore, we know that a user is NOT logged in if that Session variable is blank.
if (!empty($UserName)) {
// Besides being logged in, you may restrict access to only certain users based on an ID established when they login.
// Parse the strings into arrays.
$arrUsers = Explode(",", $strUsers);
$arrGroups = Explode(",", $strGroups);
if (in_array($UserName, $arrUsers)) {
$isValid = true;
}
// Or, you may restrict access to only certain users based on their username.
if (in_array($UserGroup, $arrGroups)) {
$isValid = true;
}
if (($strUsers == "") && false) {
$isValid = true;
}
}
return $isValid;
}
Wat ik bedoelde is dat ik af en toe wel eens scripts plaats in dezelfde directory. Maar dan zit ik even te denken, als mensen daar naar toe zouden surfen, dan zouden zij eventueel aan die inhoud kunnen :o dus ja, ik dacht, ik wil enkel toegang verlenen tot de bestanden die ik opgeef.