login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Films beveiligen (Opgelost)

Offline dimb - 28/11/2008 14:13
Avatar van dimbNieuw lid Hallo,

Ik moet voor iemand een filmwebsite maken waar mensen betaald films kunnen downloaden. Nu heb ik de hele site af maar zit ik echter nog met een probleem. De films worden opgeslagen in een map, en na betaling krijg je de link naar de film. Maar nu is het zo dat als je gewoon de url intypt je ook de film kan downloaden. Nu wil ik iets van een beveiliging maken dat je alleen toegang hebt tot de film als je betaald hebt.

Ik heb wel enkele mogelijkheden bedacht, maar heb eigenlijk geen idee hoe ik ze uit moet werken.
-> Refferal, je kan alleen toegang krijgen tot de map als je van een bepaalde pagina doorgestuurd bent
-> Bestand (.zip) inladen via ajax (zodat ze de link niet zien).
Ik hoop dat jullie mij kunnen helpen.

Paul

7 antwoorden

Gesponsorde links
Offline Giant - 28/11/2008 14:22
Avatar van Giant PHP beginner Ik zou op de pagina waar je komt als er betaald is,
een link weergeven naar een pagina met een geëncrypte querystring
(die querystring linkt naar de film in een db).
Ook zou ik er een 4 cijferige code bij zetten,
deze code ook opslaan in een DB(deze natuurlijk ook linken aan de ID van de film zodat je deze niet op een compleet andere film kan gebruiken).
En op de pagina waar je de link naar weergeeft vragen om die code.
Wanneer deze juist blijkt te zijn, de film laten downloaden en de code verwijderen uit de db. En anders een foutmelding geven.
Offline Jwvos - 28/11/2008 14:32 (laatste wijziging 28/11/2008 14:32)
Avatar van Jwvos Nieuw lid Ik zou het doen met sessions en een header().
Een code en id in de database, dus zolang je de code niet weet, je dus ook niet kan downloaden;)

Zoiets dus:
  1. <?php
  2. $id = $row['id'];
  3. $code = $row['code'];
  4. $_SESSION['film'] == "1";
  5.  
  6. echo '<a href="download.php?id='.$id.'&code='.$code.'>Klik hier</a> om de film te downloaden.';
  7. ?>


de download.php:
  1. <?php
  2. if(!empty($_SESSION['film'])) {
  3. if(isset($_GET['id']) && $_GET['id'] == $id) {
  4. if(isset($_GET['code']) && $_GET['code'] == $code) {
  5. header("Refresh: 2; url=".$film_url);
  6. $_SESSION['film'] = array();
  7. }
  8. else {
  9. echo 'De code klopt niet.<br>';
  10. }
  11. }
  12. else {
  13. echo 'Het id klopt niet.<br>';
  14. }
  15. }
  16. else {
  17. echo 'Je hebt geen rechten om deze film te downloaden.<br>';
  18. }
  19. ?>
Offline dimb - 28/11/2008 15:03
Avatar van dimb Nieuw lid Ja maar dan zijn de bestanden nog steeds te downloaden als je de url gewoon intypt
Offline Giant - 28/11/2008 15:47
Avatar van Giant PHP beginner dimb, op mijn manier zul je de url nooit te weten komen...
Zodra de code juist is, en de gencrypte querystring een match in de db heeft. Moet je deze d.m.v. een force download header laten downloaden, zo kun je dus nooit weten waar de film staat.
Ook een random code aan laten maken bij iedere betaling. (en na 48 uur ofzo weer verwijderen uit de db)
Offline BigBug - 28/11/2008 15:58
Avatar van BigBug PHP expert De meest veilige manier is zorgen dat de bestanden extern opgeslagen zijn en na betaling in de cache/folder worden geladen. Als je dit toepast in combinatie met Giant zijn manier is het niet te kraken.
Offline dimb - 28/11/2008 16:13
Avatar van dimb Nieuw lid Bedankt, mede door Arjan Kapteijn heb ik het probleem opgelost.
Ik heb de map beveiligt via CPanel en het bestand wordt nu gedownload met de volgende code:
  1. <?php
  2. $bestand = $_GET['bestand'];
  3. $map = '/var/www/bestanden/';
  4.  
  5. // Eerste kijken of het bestand uberhaupt bestaat.
  6. if(file_exists($map.$bestand))
  7. {
  8. // Force the download
  9. header("Content-Disposition: attachment; filename=\"" . basename($map.$bestand) . "\"");
  10. header("Content-Length: " . filesize($map.$bestand));
  11. header("Content-Type: application/octet-stream;");
  12.  
  13. //Dit om gezeik met IE en HTTPS te voorkomen
  14. header('Cache-Control: private');
  15. header('Pragma: private');
  16.  
  17. //Dit omdat we niet willen cache'n
  18. header("Cache-Control: no-cache, must-revalidate");
  19. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  20.  
  21. readfile($map.$bestand);
  22. }else{
  23. echo '<p>Sorry, dit bestand bestaat niet!</p>';
  24. }
  25. ?>


Kan dus een slotje op
Offline Wim - 28/11/2008 16:15
Avatar van Wim Crew algemeen Je kan het ook dmv htaccess/php beveiligen...

Plaats deze code in .htaccess in dezelfde directory als je films staan. Op deze manier heeft enkel de server toegang (127.0.0.1) tot de films (via het http-protocol iig)
  1. Allow 127.0.0.1
  2. Deny All
  3. Order Allow,Deny


Verder lees je dan met PHP de juiste film uitlezen en de "inhoud" naar de gebruiker doorsturen; deze kan de film dan opslaan op zijn pc...
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.223s