login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Downloads beschermen (Opgelost)

Offline bigsmoke - 06/09/2007 16:39
Avatar van bigsmokePHP interesse Stel dat ik een file aanbiedt om te downloaden alleen voor user 1.
Hoe voorkom ik dan dat deze file ook kan worden gedownload voor vb user 2. User 2 weet dan wel de URL van de download niet maar dit kan user 1 eventueel aan user 2 doorvertellen. Nu is mijn vraag hoe bescherm ik mijn downloads dat allen user 1 dit kan downloaden en user 2 bij het opvragen van de download een of andere melding krijgt dat deze download niet voor hem beschikbaar is?

mvg

10 antwoorden

Gesponsorde links
Offline Simax - 06/09/2007 16:48
Avatar van Simax Onbekend
  1. $query = mysql_query("SELECT id FROM tabel WHERE username = '".$_SESSION['username']."'") or die(mysql_error());
  2. $id = mysql_fetch assoc($result);
  3.  
  4. if($id = "1")
  5. {
  6. echo("Bestand mag gedownload worden.");
  7. }
  8. else
  9. {
  10. echo("U heeft niet genoeg rechten om dit bestand te downloaden.");
  11. }


Zoiets?
Offline bigsmoke - 06/09/2007 16:50
Avatar van bigsmoke PHP interesse ja maar bij het downloaden van user 1 kan hij weten waarvan hij juist download dus exacte locatie vb:
mijnsite.be/downloads/file.zip
en als hij deze doorgeeft aan user 2 dan kan hij deze ook zonder problemen downloaden en dat wil ik voorkomen 
Offline Simax - 06/09/2007 16:52
Avatar van Simax Onbekend Nee, want als de user ingelogd is,
controleer je de id van de ingelogde gebruiker.
En alleen gebruik met id '1' mag downloaden.
Offline Koen - 06/09/2007 16:53 (laatste wijziging 06/09/2007 16:59)
Avatar van Koen PHP expert
Rimex schreef:
[..code..]

Zoiets?

Allemaal goed en wel maar..
Wat als user1 de link van de download doorgeeft aan een ander persoon, die dit bestand helemaal niet mag downloaden?
Edit: Beetje laat :/
Offline bigsmoke - 06/09/2007 16:53
Avatar van bigsmoke PHP interesse ja maar los daarvan je kan tch gwn de file openen zonder je php scriptje te gebruiken?

Offline Koen - 06/09/2007 16:54 (laatste wijziging 06/09/2007 16:58)
Avatar van Koen PHP expert Oops,
volgens mij heb ik het verkeerde knopje gedrukt 'quote' ipv 'edit'
excuus.
Offline vinTage - 06/09/2007 17:02
Avatar van vinTage Nieuw lid Je kan via htaccess aangeven welk ip adres er in een bepaalde map mag (of juist niet).

deny from all
allow from ***.zijnIPadres.**.***
Offline bigsmoke - 06/09/2007 17:07
Avatar van bigsmoke PHP interesse Dit zou eventueel wel mogelijk zijn met PHP dat .htaccess bestandje aan te maken en het ip erbij zetten maar wat als het ip in die tussentijd veranderd? (normaal gezien zou ik dat niet erg vinden maar ik werk met betalende download en dat zou voor problemen kunnen zorgen)
Offline timmie_loots - 06/09/2007 17:36
Avatar van timmie_loots PHP gevorderde Geen van de mogelijkheden hierboven bieden wat jij graag wilt; gemakkelijk per gebruiker aan kunnen geven of ze de bestanden mogen downloaden.

Terwijl daar een heel makkelijke manier voor is!

De PHP code is als volgt:
  1. <?php
  2.  
  3. // Na een check of de gebruiker deze mag downloaden
  4. // (dit ga ik hier niet simuleren, dat kun je zelf wel ;) )
  5. // doe je dit:
  6.  
  7. $nieuwe_naam = 'nieuwe_naam';
  8. $locatie_bestand = 'beschermde_map/download1.zip';
  9.  
  10. // Het bestand 'serveren':
  11. serveFile($locatie_bestand, $nieuwe_naam);
  12.  
  13. ?>


Zoals je wel ziet wordt hier de functie serveFile aangeroepen, die zit niet standaard in PHP, die heb ik zelf gemaakt, en ziet er als volgt uit:

  1. <?php
  2.  
  3. function serveFile($original, $newname)
  4. {
  5.  
  6. // For IE
  7. if (ini_get('zlib.output_compression'))
  8. ini_set('zlib.output_compression', 'Off');
  9.  
  10. // Get the extension
  11. $extension = strtolower(substr(strrchr($original, '.'), 1));
  12.  
  13. // Get the content-type
  14. switch ($extension) {
  15. case "pdf": $ctype = 'application/pdf'; break;
  16. case "exe": $ctype = 'application/octet-stream'; break;
  17. case "zip": $ctype = 'application/zip'; break;
  18. case "doc": case "docx": $ctype = 'application/msdos'; break;
  19. case "xls": case "xlsx": $ctype = ' application/vnd.ms-excel'; break;
  20. case "xml": $ctype = 'application/xml'; break;
  21. case "avi": $ctype = 'video/avi'; break;
  22. case "bmp": $ctype = 'image/bmp'; break;
  23. case "css": $ctype = 'text/css'; break;
  24. case "gif": $ctype = 'image/gif'; break;
  25. case "png": $ctype = 'image/png'; break;
  26. case "jpg": case "jpeg": $ctype = 'image/jpeg'; break;
  27. case "ppt": case "pptx": $ctype = 'application/vnd.ms-powerpoint'; break;
  28. case "hlp": case "help": $ctype = 'application/x-helpfile'; break;
  29. case "html": case "htm": $ctype = 'text/html'; break;
  30. case "txt": case "ini": case "idc": case "hh": case "h":
  31. case "jav": case "java": case "list": case "log": case "lst":
  32. case "m": case "mar": case "pl": case "sdml": case "text": case "c":
  33. case "c++": case "cc": case "com": case "conf": case "cxx": case "def": case "php":
  34. case "f": case "f90": case "for": case "g": case "bat": $ctype = 'text/plain'; break;
  35. case "rar": $ctype = 'application/zip'; break;
  36. default: $ctype = 'text/plain'; break;
  37. }
  38.  
  39. // Check if headers were sent, if so, abort
  40. if (headers_sent())
  41. trigger_error('headers already sent', E_USER_ERROR);
  42.  
  43. // Check if the original exists
  44. if (!is_file($original))
  45. trigger_error('file not found', E_USER_ERROR);
  46.  
  47. // Send some headers
  48. header('Pragma: public');
  49. header('Expires: 0');
  50. header('Cache-control: must-revalidate; post-check=0, pre-check=0');
  51. header('Cache-control: private', false);
  52. header('Content-Type:' . $ctype);
  53. header('Content-Disposition: attachment; filename="' . basename($newname) . '.' . $extension . '"');
  54. header('Content-Transfer-Encoding: binary');
  55. header('Content-Length: ' . filesize($original));
  56.  
  57. // Read and output the file's contents
  58. readfile($original);
  59.  
  60. // Stop output, to prevent the file from being corrupted
  61.  
  62. }
  63. ?>


Als je de map waarin de bestanden staan dan ook nog eens blokkeerd voor alle IP's (dat maakt niet uit voor het script, die kan er evengoed nog bij), kunnen alleen de mensen die de toegang hebben bij het bestand.
Offline bigsmoke - 06/09/2007 19:39
Avatar van bigsmoke PHP interesse great thx!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.246s