Afschermen geuploade documenten in een CMS-website

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Java Developer Onderzoeksinstituut Architec

Bedrijfsomschrijving Als Senior Java Developer kom je te werken bij een internationaal gerenommeerd onderzoeksinstituut. Dagelijks is dit instituut verantwoordelijk voor de juiste samenwerking, toegankelijkheid en communicatie voor circa 9000 interne gebruikers. In een team van elf ontwikkelaars ben je als Senior Java Developer verantwoordelijk voor het ontwikkelen van functionele ontwerpen naar technische oplossingen. Deze projecten bestaan o.a. projecten zoals het implementeren van Elastic Search en het koppelen van CMS. Ook fungeer je als vraagbaak voor je collega’s op het gebied van backend softwareontwikkeling. Daarnaast denk je graag mee op het gebied van architectuur qua mogelijke oplossingen en innovatie. Momenteel zijn

Bekijk vacature »

Simon Jansen

Simon Jansen

22/07/2010 10:43:20
Quote Anchor link
Hallo,

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
 
PHP hulp

PHP hulp

27/10/2020 07:56:35
 
P Lekensteyn

P Lekensteyn

22/07/2010 11:51:17
Quote Anchor link
Het beste is om zulke bestanden buiten de webroot te plaatsen (buiten public_html, htdocs, etc).
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
RewriteEngine On
RewriteRule ^uploads/(.+)$ file.php?$1

file.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.