Beveiligd download.php script dmv phpBB

Door Buur , 17 jaar geleden, 4.133x bekeken

Met dit script kan je bestanden alleen downloaden als je bent ingelogged in phpBB, ben je dit niet dan krijg je een pagina te voorschijn met de vraag of je dit eerst wil doen..

Script inelkaar geknutseld (met hulp van het phpbb forum), en omdat er vast wel meer mensen zijn die dit kunnen gebruiken, post ik hem even.

---

Gebruik:
Maak een 'downloads' map (in je forum root) en plaats daar je bestanden; beveilig die bestanden met CHMOD, met 600 (admin read&write only).
Niemand kan erdan bij, behalve via het download script.
Ook kan je een .htaccess file in die map zetten met de code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
order allow,deny
deny from all

Nu worden standaard alle bestanden die je in die map plaatst beveiligd, en hoef je niet meer ze te chmodden - nadeel hiervan is dat het publiek eventuele bestanden die wél iedereen mag zien, ook niet meer kunnen downloaden.
Houd hier dus rekening mee, welke van de 2 methode's het best bij jou zijn toe te passen (maak eventueel een map 'beveiligde_downloads' en gebruik die icm het .htaccess file)

Het script roep je aan door simpel te gaan naar:
www.url.nl/forum/download.php?bestand=bestandnaam.ext
Als je ingelogged bent word het bestand dan tevoor schijn getoverd - zo niet, krijg je een bericht dat je ingelogged moet zijn om het op te vragen :)

Gebasseerd op:
http://www.phphulp.nl/php/scripts/1/742/
Thanks to: PHP Newbie

Succes ermee :)

Gesponsorde koppelingen

PHP script bestanden

  1. beveiligd-downloadphp-script-dmv-phpbb

 

Er zijn 23 reacties op 'Beveiligd downloadphp script dmv phpbb'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Niek s
niek s
17 jaar geleden
 
0 +1 -0 -1
leuk snippetje, maar die chmod.. maakt dat wat uit?
Buur
Buur
17 jaar geleden
 
0 +1 -0 -1
Het hoeft niet persé.
Het chmodden van die bestanden zorgt ervoor dat je niet hem gewoon zou kunnen downloaden.

Stel je hebt link www.url.nl/forum/download.php?bestand=voorbeeld.zip;
Iemand die niet ingelogged is zou dan gewoon naar www.url.nl/forum/downloads/voorbeeld.zip kunnen gaan om het bestand daar te downloaden zonder problemen ;)
Met CHMOD krijgen ze dan 'toegang verboden' en moeten ze verplicht het download.php bestand gebruiken :)
Robert Deiman
Robert Deiman
17 jaar geleden
 
0 +1 -0 -1
Dat is ook wel een mooi idee om downloads te beveiligen. Leuk scriptje Buur.
Jelmer -
Jelmer -
17 jaar geleden
 
0 +1 -0 -1
Eventueel kan je nog een .htaccess bestandje in de download-map zetten die toegang tot de map blokkeert.
Legolas
Legolas
17 jaar geleden
 
0 +1 -0 -1
.htaccess in downloads map:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
order allow, deny
deny from all
Buur
Buur
17 jaar geleden
 
0 +1 -0 -1
Goed idee!

Niet aangedacht, omdat ik het script zelf gebruik voor 'losse files' en niet persé een map. (dus dan gaat dat niet op)
Maar heel goed idee voor downloads map, zal toevoegen aan script!
Arjan Schuurman
Arjan Schuurman
17 jaar geleden
 
0 +1 -0 -1
Waarom switch je telkens je taal tussen nederlands en engels?
Katjan
katjan
17 jaar geleden
 
0 +1 -0 -1
je checkt voor ../, maar niet voor ./
alle mappen zijn dus nog steeds toegankelijk voor kwaadwilligen;)
Jelmer -
Jelmer -
17 jaar geleden
 
0 +1 -0 -1
Hoe wil jij met ./ dan een map hoger komen? ./ betekent niets meer dan huidige map.
Buur
Buur
17 jaar geleden
 
0 +1 -0 -1
@Arjan Schuurman
Omdit script te integreren, en ik redelijk n00b ben op php gebied, had ik hulp gevraagd aan onze engels-talige phpBB.com collega's ;)
Zo doende dat ik soms wat gekopieërd en geplakt heb- en het zo engels is geworden.
(wees vrij om het te translaten in volledig nederlands, dan pas ik het aan :P)

@huib keemink
Ik snap niet wat je bedoeld?
Net als je Jelmer zegt, ./ betekend huidige map; ../ betekend map up.
./ hoef ik niet te beveiliging, als je bij het bestand kan- zit je al in die map haha :P
../ is dus beveiligd al.

Verder is dat deel van het script van PHP Newbie.
zie http://www.phphulp.nl/php/scripts/1/742/ voor eventuele toelichting hierop.
Legolas
Legolas
17 jaar geleden
 
0 +1 -0 -1
in content-disposition vergeet je de attachment; en bij content-type zoek je waarschijnlijk application/octet-stream.
Martijn B
Martijn B
17 jaar geleden
 
0 +1 -0 -1
Een spatie tussen allow en deny vind Apache niet tof.
Tenmiste dat zij mijn Apache :D
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
Order deny,allow
Deny from all
M Ypma
M Ypma
17 jaar geleden
 
0 +1 -0 -1
waarom zie ik nooit iemand gewoon logisch beschermde bestanden als configuratie en downloads buiten de root plaatsen? zo zijn ze niet van buitenaf benaderbaar en kun je met een fileviewer zelf bepalen wat downloadbaar is en niet...
/www/fileviewer.php
/downloads/*alle bestanden hier
Buur
Buur
17 jaar geleden
 
0 +1 -0 -1
@Legolas
Je hebt gelijk, dit heb ik zelf weggehaald omdat ik het script gebruik voor PDF bestanden - en die mogen van mij in de browser wel geopend worden.
(vandaar octet-stream weggehaald) je kan het er weer neerzetten (ik heb er PDF staan dus vandaar)
Maar hij werkt zo ook goed. bij attachment geld het zelfde (voor pdf)
Ik zal het uit netheid even aan passen, Thx!

@Martijn!
Je hebt gelijk ;)
Had even spontaan geknipt en geplakt van Legolas :P
Zal het even aanpassen! ThQ

@michel
Veel werk; en in mijn geval kan ik het niet buiten de root plaatsen, door dat ik webhosting heb (en via FTP niet de toegangsrechten heb:S)
Maar schrijf anders eens een script daarvoor zou ik zo zeggen?
Het fileviewer.php script ben ik hier nog niet tegengekomen, meschien link?
Thx!
Buur
Buur
17 jaar geleden
 
0 +1 -0 -1
Er zijn 2 optie's om dit script te gebruiken.

1. Gebruikers krijgen een pop-up, en ze moeten kiezen voor openen, opslaan of annuleren (standaard)
2. Gebruikers krijgen, indien mogelijk, meteen de content te zien in hun browser.

Voor punt 2 moet je de volgende modificatie doen:

Regel 24:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
               header('Content-type: Application/octet-stream');

Verander dit in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
               header('Content-type: Application');

Je kan octet-stream ook vervangen door het daadwerkelijke content-type; bijvoorbeeld in het geval van PDF - Application/PDF

En het belangrijkste:

Regel 27:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
                header('Content-Disposition: attachment; filename='.$_GET['bestand']);

Verander dit in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
                header('Content-Disposition: inline; filename='.$_GET['bestand']);


Voilá, je bestand zou nu moeten openen in Firefox of Internet Explorer of Opera of Netscape of wat voor browser je ook maak gebruikt ;)
Legolas
Legolas
17 jaar geleden
 
0 +1 -0 -1
application is géén goed mime-type, je moet wel een goed mime-type geven dan
Buur
Buur
17 jaar geleden
 
0 +1 -0 -1
Klopt; let dus vooral op wat er onderstaat :P
''Je kan octet-stream ook vervangen door het daadwerkelijke content-type; bijvoorbeeld in het geval van PDF - Application/PDF''

Maar goed; wat zou er dan moeten staan?
(text/html ?)
Ik weet het niet :P (sorry)
Legolas
Legolas
17 jaar geleden
 
0 +1 -0 -1
wisselt per bestand ej :P
Buur
Buur
17 jaar geleden
 
0 +1 -0 -1
Haha :P
Naja dan houden we het maar op een niet goed mimi-type; hij doet het er wel om :P :D
M Ypma
M Ypma
17 jaar geleden
 
0 +1 -0 -1
@Buur
is totaal niet veel werk... sterker nog het is minder werk...er komt geen htacces bij kijken...
het is alleen de locatie waar je server intern ze bestanden vandaan haalt dat anders is...
Buur
Buur
17 jaar geleden
 
0 +1 -0 -1
Hmm, naja blijft bij mij het probleem dat ik niet in alleen in de www-root kan komen :P
Daarbij kan je met dit script voorals nog géén upmap aanvragen, je kan hem wel editten daarvoor.

Maar goed, post dat script zou ik zo zeggen :P
Er zullen genoeg zijn die er wel belang bij hebben denk ik!
Remy
remy
17 jaar geleden
 
0 +1 -0 -1
ik krijg een witte pagina
ik weet niet wat ik fout doe
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './forum/';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

// standard session management
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
// end session management
if( !$userdata['session_logged_in'] )
{

message_die(GENERAL_MESSAGE, 'You must log in to access this page');
}

// begin download script
    $dir = './downloads/'; //geef een map aan met eindslash (. voor deze map)
    
    if(isset($_GET['bestand'])) //als ?bestand= bestaat
    {
        if(eregi('../', $_GET['bestand']) == FALSE) //als er geen ../ in de bestandsnaam voorkomt, dus geen upmap wordt aangevraagd
        {
            if(file_exists($dir.$_GET['bestand'])) //en ?bestand=.. is ook nog eens een bestaand bestand is
            {
                header('Content-type: Application/octet-stream'); //zet de header dat het bestand gedownload moet worden
                                                                  //en dat het dus niet in de browser afgespeeld kan worden

    
                header('Content-Disposition: attachment; filename='.$_GET['bestand']); //geef aan welk bestand gedownload moet worden
                readfile($dir.$_GET['bestand']); //en open vervolgens dat bestand
            }
            else //als het bestand niet bestaat
            {
                echo 'bestand bestaat niet'; //echo dat
            }
        }

        else //als er wel ../ in de bestandsnaam voorkomt
        {
            echo 'Deze map is niet toegankelijk'; //echo dat dat niet mag
        }
    }

    else //als ?bestand= niet is opgegeven
    {
        echo 'Geen bestand opgegeven'; //echo dat
    }
// end download script
?>
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Buur
Buur
17 jaar geleden
 
0 +1 -0 -1
Heb je de map wel goed ingesteld?
Geef anders link..

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. beveiligd-downloadphp-script-dmv-phpbb

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.