Afschermen geuploade documenten in een CMS-website
Ik heb een CMS-website gebouwd waarbij de gebruikers de inhoud van de pagina's kunnen bewerken maar ook documenten (pdf's e.d.) kunnen uploaden. Voor het bewerken van de paginainhoud maak ik gebruik van CKeditor, voor het documentbeheer maak ik gebruik van CKfinder.
Om van de website gebruik te kunnen maken dienen gebruikers in te loggen. De geuploade documenten komen in submappen terecht. (Ingesteld via CKfinder).
Hoe kan ik het zo inrichten dat documenten alleen via de applicatie benaderd kunnen worden en niet via een internetbrowser als je de url weet tenminste?
Ik weet dat ik internetmappen kan beveiligen met een gebruikersnaam/wachtwoord via .htaccess. Maar als ik de documenten in een internetmap benader via de website is het niet gebruikersvriendelijk dat dan eerst nog een gebruikersnaam of wachtwoord ingevoerd moet worden. Kan ik met php programmeren tegen .htaccess o.i.d.?
Is het mogelijk om een soort van wrapper te bouwen, een php-programma dat automatisch opstart als een document in internetmap wordt benaderd en dat dan kijkt of de gebruiker de gewenste sessie instellingen heeft, zo ja dan kan het document worden getoond, zo nee dan volgt een foutmelding.
Wie heeft ervaring met dit soort zaken en tips voor mij?
gr. Simson
Bestanden vraag je nog aan via /uploads/.
Zo ziet de structuur er dan uit:
/www/htdocs/uploads/ -> http://example.com/uploads/
/www/uploaded/ -> niet van buiten bereikbaar.
/www/htdocs/file.php -> http://example.com/file.php, maar wordt niet direct aangeroepen
In /www/htdocs plaats je een .htaccess bestand:
file.php
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
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$uploadMap = '/www/uploaded/';
$filename = get_absolute_path($_SERVER['QUERY_STRING']);
$file = $uploadMap . $filename;
// even geleend van de PHP Manual :p
function get_absolute_path($path) {
$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
$parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
$absolutes = array();
foreach ($parts as $part) {
if ('.' == $part) continue;
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
return implode(DIRECTORY_SEPARATOR, $absolutes);
}
if(!file_exists($file)){// bestand niet gevonden
header('HTTP/1.1 404 Not Found');
exit;
}
// lees maar in
// Eventueel Content-Type sturen?
readfile($file);
?>
$uploadMap = '/www/uploaded/';
$filename = get_absolute_path($_SERVER['QUERY_STRING']);
$file = $uploadMap . $filename;
// even geleend van de PHP Manual :p
function get_absolute_path($path) {
$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
$parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
$absolutes = array();
foreach ($parts as $part) {
if ('.' == $part) continue;
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
return implode(DIRECTORY_SEPARATOR, $absolutes);
}
if(!file_exists($file)){// bestand niet gevonden
header('HTTP/1.1 404 Not Found');
exit;
}
// lees maar in
// Eventueel Content-Type sturen?
readfile($file);
?>