[PHP] Documenten pas downloaden na controle op rechten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Binnen mijn CMS wil ik gebruikers de mogelijkheid geven documenten te uploaden en aan te geven voor welke gebruikersgroepen dit document te downloaden is. Op het moment dat een gebruiker naar de URL van het document surft, wil ik eerst zijn toegangsrechten checken alvorens ik hem het document wel of niet laat downloaden.

Na wat lezen in de Google Newsgroups en op php.net, heb ik geleerd dat in een dergerlijk geval de documenten buiten de webroot worden opgeslagen. Als er een request is, worden eerst de rechten gechecked en als die goed zijn, wordt het document met fpassthru naar de client gestuurd, zoiets als:
PHP:
1
2
3
4
5
6
$completeFilePath = $fileDir . '/' . $fileName;
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');
header("Content-type: application/octet-stream\nContent-Disposition: inline; filename=\"".$fileName."\"\nContent-length: ".(string)(filesize($completeFilePath)));
$fd=fopen($completeFilePath, 'r');
fpassthru($fd);

Mijn vraag is of het ook mogelijk is, bijvoorbeeld met .htaccess, om de documenten onder de webroot te bewaren, en toch toegang via een url te vermijden. Dus als dit: site.com/files/word/example.doc een bestaande dir is, is het dan mogelijk om ook eerst de rechten te checken en afhankelijk daarvan de toegang tot het document te verlenen danwel te ontzeggen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Dat kan wel, maar dan gaat dat niet via php, maar dmv de browser's eigen authentication.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan met htacccess en file download doorlussen naar een script wat de rechten test en vervolgens download

code:
1
2
3
  Options +FollowSymlinks
 RewriteEngine on
 RewriteRule ^(.*)\/(.*)$ request.php?type=$1&file=$2 [nc]


Deze .htaccess goei je dan in de files directory

Van deze site heb ik vrij veel grappige htacces dingen gehaald:
http://corz.org/serv/tricks/htaccess2.php?page=all

Ik meen trouwens dat fpassthru een trage functie is. het beste kan je gewoon readfile() gebruiken op servers met < PHP 5. Op servers met PHP 5 werkt dit niet lekker omdat readfile dan maar max 2 mb leest. Mocht je het script willen wat je dan moet gebruiken dan hoor ik het wel

[ Voor 17% gewijzigd door Verwijderd op 08-12-2005 19:42 . Reden: linkje derbij ]