PDA

Volledige versie bekijken : Bestanden beveiligen


M0L
%Europe/Berlin %807 %2006, 20:22
op een site waar je inloggen om bestanden te downloaden, kun je niet zo maar de url van het bestand in typen en hem dan gewoon downloaden, toch?

dat wil ik op mijn site ook , dus dat je een bestand alleen kan download via mijn php bestand nadat je ingelogd hebt. Nu moet je ook eerst inloggen maar als je url van het bestand weet kun je het zo downloaden zonder dat je ingelogd bent. Hoe kun je dat doen???

Dauntless
%Europe/Berlin %817 %2006, 20:36
Waarschijnlijk niet de enige manier, maar het gaat met .htaccess . Je kan er voor zorgen dat de toegang tot bestanden geweigerd wordt.

Bv:
<Files "*.pdf">
deny from all
</Files>
<Files "*.txt">
deny from all
</Files>

Deze code zorgt ervoor dat alle .txt en alle .pdf bestanden niet opgevraagd kunnen worden (rechtstreeks dan toch).
Die code zet je in een bestandje met de naam .htaccess (geen extra extention).

En dan kan je met een php file je bestand openen en laten downloaden.

<?php
$downloadfile = "bestand.pdf";
header('Content-Type: application/octet-stream');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="'.$downloadfile.'"');
header('Content-Length: '.filesize($downloadfile));
readfile($downloadfile);
?>

De 2de header regel moet je wel aanpassen aan het type. Er is een header type dat voor alles geldt, maar 'k weet niet juist welke :#.

Hoop dat het lukt :).

brossiekoppie
%Europe/Berlin %821 %2006, 20:43
Er is een header type dat voor alles geldt, maar 'k weet niet juist welke :#.

Zo is dat:D

header('Content-Description: File Transfer');
header('Content-Type: application/force-download');

Dauntless
%Europe/Berlin %827 %2006, 20:52
Zo is dat:D

header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
Thx :).

Is de methode die ik hier boven beschrijf eigenlijk goed? Want ik ben ook nog volop in het leer-PHP proces :p.

brossiekoppie
%Europe/Berlin %879 %2006, 22:06
Ja zeker; vaak wordt er wel nog de functie basename() toegepast op de bestandsnaam, dat is wel nog handen bij het downloaden van externe url's om verwarring te vermijden (lees de php docs voor meer uitleg wat die precies doet).

En ook als je pagina ook daar end-users wordt gebruikt is het handig dat je de silence operator (@) gebruikt voor de functie readfile. Er durft wel al eens iets mis te gaan bij deze functie (verkeerde rechten enz) en met de @ vermijd je dat de gebruiker zo'n lelijke foutmelding krijgt te zien :D

M0L
%Europe/Berlin %707 %2006, 17:59
bedankt, nu snap ik het.
maar nog een vraagje:
in jou voorbeeld van het .htacces bestand staat .pdf, maar hoe kan ik er voor zorgen dat alle bestanden in een bepaalde map en in de mappen die daar onder liggen "beveiligt" worden???

Dauntless
%Europe/Berlin %718 %2006, 18:14
"*.*" lijkt me. 2 wildcards.

M0L
%Europe/Berlin %789 %2006, 19:57
vars.load("secret/index.txt?"+random(10000));
dit werkt nu niet meer omdat dat bestand beveiligt is, kan dit nog wel op een andere manier