Beveiligd downloaden met .htaccess

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Erik van Heck

Erik van Heck

14/10/2010 15:34:03
Quote Anchor link
Hallo lezers,

Ik heb een vraag, misschien is tie makkelijk, maar na 3, 4 dagen zoeken ben ik er nog niet uit. Het is namelijk zo:

Iemand betaald online met PayPal.
Van PayPal wordt diegene doorgestuurd naar een invulpagina om een download-code in te vullen. De klant vult de code in en komt op de (beveiligde) pagina.

Daar staat een link om de download te downloaden. Tot dit punt snap ik het. Nou komt het moeilijke:
Je hebt het bestand (een .mp3-bestand) en die staat in de map downloaden. De link op de (beveiligde pagina) linkt daarnaar toe. Maar als je nou rechtstreeks de link intypt (www.example.com/downloaden/test.mp3 bijvoorbeeld) dan kom je gelijk bij het bestand zonder het eerst te betalen. Nou dacht ik dat moet met .htaccess, en ik was er bijna want ik had het gevonden dat hij lezen via de browser blokkeerd mar met de PHP-functie: readfile dan zie je allemaal rare tekens, wat, denk ik, de basis is van een .mp3 bestand ofzo). Hoe kun je zo'n bestand nou zo beveiligen dat niemand het kan downloaden maar wel via een andere pagina ofzo.

Ik hoop dat jullie een oplossing hebben!
 
PHP hulp

PHP hulp

24/12/2024 18:16:06
 
Pim -

Pim -

14/10/2010 15:42:46
 
Wim U

Wim U

14/10/2010 15:43:55
Quote Anchor link
Volgens mij heb je meer baat bij het redirecten van de gebruiker via de .htaccess via de volgende code:

Options +FollowSymLinks

#nette urls
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1
 
Joren de Wit

Joren de Wit

14/10/2010 15:50:38
Quote Anchor link
Nee, echt niet. Dan heb je nog geen controle of de gebruiker wel/niet betaald heeft! De oplossing die Pim geeft is een goede...
 
P Lekensteyn

P Lekensteyn

14/10/2010 15:57:25
Quote Anchor link
Het script in de link van Pim is onveilig. Als je geen directories gebruikt, dan zou je $file=basename($file); kunnen doen.
Neemt niet weg dat je echt fatsoenlijke controle moet doen op de naam, dan wel het pad.
 
Wim U

Wim U

14/10/2010 16:05:31
Quote Anchor link
@Blanche
Volgens mij kun je dat probleem wegvangen door sessies te gebruiken. De combinatie van een sessie met het htaccess bestand voorkomt een benadering van de link door gebruikers die niet betaald hebben. Dit is volgens mij het meest waterdicht.
 
Joren de Wit

Joren de Wit

14/10/2010 16:12:16
Quote Anchor link
@Peter: ik heb niet goed naar het script gekeken, maar de methode is wel een goede. Hier een veilige variant: http://www.phptuts.nl/snippets/overig/downloadscript.php

De meest eenvoudige methode lijkt me verder door de map met downloads buiten de webroot te zetten, op die manier kunnen bestanden in die map nooit van buitenaf benaderd worden.
 
Pim -

Pim -

14/10/2010 16:39:49
Quote Anchor link
@Blanche
Op shared hosts kan dat vaak niet en ook is "deny from all" in je htaccess toch gewoon voldoende? Jouw script geeft altijd het 'application/octet-stream' mime type mee, dat schijnt niet netjes te zijn. ( Maar vraag me niet waarom )

Ik denk trouwens dat het veiliger is om de realpath te nemen van de locatie en dan te kijken of die onder de download-root zit in plaats van te kijken of er twee puntjes in zitten, dat ziet er kwetsbaar uit.
 



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.