Ongetwijfeld is deze vraag al eens gesteld, maar ik kan de juiste
sleutelwoorden niet vinden, dus verwijs me ten antwoord gerust naar de
juiste draad in Google Groups.
Hoe geeft ik gebruikers toegang tot grote bestanden die voor andere
gebruikers moeten zijn afgeschermd?
Het probleem wat zich voordoet is dat ik op een al gedeeltelijk gebouwde
applicatie moet voortbouwen.
De site is op PHP/MySQL gebaseerd, waarbij gebruikers verschillende
toegangsniveau's hebben. De site geeft toegang tot grote bestanden (we
spreken over tientallen megabytes per bestand), maar zal niet
noodzakelijkerwijs tegelijkertijd veel gebruikers hebben.
De authenticering wordt via de database en PHP-sessies afgehandeld: in de
database staan de inloggegevens, en als die overeenkomen met wat de
gebruiker opgeeft, wordt een sessie aangemaakt. Gebruikers behoren niet
alleen tot een bepaald niveau (bezoeker, gebruiker, beheerder,
sitebeheerder), maar hebben in sommige gevallen ook voor bepaalde duur
toegang tot de site, en daarna niet meer. Gebruikers van een hoger nivueau
hebben over het algemeen toegang tot een grotere verzameling bestanden, en
meer mogelijkheden die bestanden te manipuleren.
Als ik de bestanden in normale mappen binnen de documentroot zou zetten,
zou iedereen die de naam van de map en de bestanden kan raden, bij de
bestanden kunnen. Dat wil ik niet.
De verschillende methoden die ik via Google heb gevonden of zelf heb
bedacht, om alleen de juiste gebruiker toegang te geven tot een bepaald
bestand, hebben allemaal hun nadelen:
- Ik laat PHP via fread() of fpassthrough() het bestand oplepelen. Dat
heeft het grote voordeel dat authenticering puur via de sessie gaat, maar
het nadeel dat je met intelligente buffering moet gaan werken (PHP
reserveert voor een bestand van 50 MB gerust 50 MB geheugenruimte, en
hardware schaalt over het algemeen niet zo lekker), en dat er een extra
schakel in het proces zit die de boel mogelijk vertraagt.
- Ik maak tijdelijke (voor de duur van de sessie) map- en bestandsnamen aan
en m.b.v. mod_rewrite laat ik die nepnamen verwijzen naar de echte namen.
- Ik laat de PHP-code .htaccess- en .htpasswd-bestanden aanpassen. Schakel
ik daarmee dan niet echter een tweede laag van authenticering in? Is er een
manier om Apache naar de sessies van PHP te laten kijken?
Zijn er andere methoden?
Uiteraard is HTTP niet echt een geschikt protocol voor het versturen van
grote bestanden. Ik heb al FTP voorgesteld, maar dat was niet de bedoeling;
de applicatie moet er zo 'gebruiksvriendelijk' mogelijk uitzien, en
blijkbaar betekent dat, dat het een webapplicatie moet worden.
--
Branko Collin
if you reply by e-mail, please change invalid to nl and z to s
(but replies to the newsgroup are preferred)

Likes:
![[PHP/MySQL] bestanden via database beveiligen](https://www.webhostingtalk.nl/images/WHT_rd/misc/dT.png)
Quote