Ik zit een beetje te worstelen met hoe ik het beste de beveiliging van een x aantal bestanden vorm ga geven.
Op een portaal waar mensen moeten inloggen kunnen zij documenten vinden (dit betreffen PDF bestanden met een totaal van 6MB). Mensen zonder account moeten niet bij deze bestanden kunnen komen. Maar mensen die ingelogd zijn moeten enkel op een linkje kunnen klikken en deze bestanden kunnen lezen en/of downloaden, zonder extra wachtwoorden of toestanden.
Hoe beveilig ik dit het beste?
Kan ik de bestanden het beste in de database zetten of in een beveiligde map op de server en hoe pak ik dit het beste aan?
Als je een hash aanmaakt op een bestand in de Database, en deze laat controleren in het bestand zelf, waarna je deze direct weer verwijderd ziet de gebruiker het bestand, maar daarna is het bestand nietmeer zichtbaar. (Dus ook niet met Refreshen)
aansluitend op Bas betekend dat dus dat de bestanden niet publiekelijk toegankelijk mogen zijn. Je kunt de bestanden in een directory zetten die niet van buitenaf te benaderen is. Vervolgens kun je een PHP script schrijven die de inhoud van de bestanden kan teruggeven maar natuurlijk alleen als een gebruiker genoeg rechten heeft.
<?php
header("Content-type: application/pdf");
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile("../private/original.pdf");
?>
@Furio. Die begrijp ik niet goed.
Als ik zoals in de post van 23/06/2014 13:24:48 wordt aangegeven direct in de adresbalk het volledige pad ingeef naar een pdf, hoe past jouw oplossing daar dan in? Bij het oproepen van een pdf-bestand komt geen php kijken.
In het verlengde daarvan begrijp ik ook niet goed wat Peter wil met
Peter Flos op 23/06/2014 13:24:11
Als je een hash aanmaakt op een bestand in de Database, en deze laat controleren in het bestand zelf,
Het is een pdf-bestand; dan kun je toch niet in het bestand controleren?
Plaatsen van het te downloaden bestand in een directory buiten de root / die niet publiekelijk toegankelijk is lijkt me de enige oplossing. Er wordt dan wel verwezen naar een (php)bestand om het pdf-document op te halen. In dat php-bestand kan dan wel e.e.a. gecontroleerd worden zoals Furio / Peter aangeeft.
Je moet een soort bootstrap maken. Net zoals vaak bij een MVC opbouw wordt gedaan. Je maakt een soort "deliver" pagina zoals ze dat soms noemen. Dat is een doorgeefluik waar gecontroleerd wordt of je ingelogd bent. De link naar deze pagina is dus ook de link naar het bestand. Je kunt met een GET variabele aangeven welk bestand je wil ophalen. Als je bent ingelogd, wordt met PHP het bestand als output gegeven, of gewoon geinclude (maar dat kan niet altijd zomaar).
De bestanden zelf staan natuurlijk in een beveiligde map.