Bestanden afschermen op webserver *

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Dimby
  • Registratie: April 2008
  • Laatst online: 01-07-2024
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

Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

Allereerst lijkt mij dit iets wat je bedenkt voor dat je gaat bouwen, maar goed.

Ik denk dat ik het ongeveer zo zou oplossen :
Maak een tabel met een koppling naar de user, film en een geheime token. Die token lees je uit in de url en controleert of de ingelogde user wel overeenkomt met die uit de database en als dat klopt kun je ze de film laten downloaden.

[ Voor 6% gewijzigd door daniëlpunt op 28-11-2008 14:22 ]


Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 17-09 10:39

Cloud

FP ProMod

Ex-moderatie mobster

Een complete gebruikersomgeving is het meest handig. Zorg ervoor dat ze moeten registreren met gebruikersnaam wachtwoord, en toon de films alleen als de betalende gebruiker ingelogd is. Dat lost al heel wat op. Het enige waar je dan nog naar moet kijken is account sharing, maar dat valt misschien met ip-restricties of een maximum aantal views wel gedeeltelijk af te vangen.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 10:28

krvabo

MATERIALISE!

Je kan drm gebruiken, of een script dat de film doorstuurt vanuit een map die niet via het web te benaderen is. Gebruik dan de techniek van daniëlpunt om te controleren of het een legitieme download is.
Jouw twee methoden in de OP zijn beiden te spoofen.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Mogen ze de film fysiek downloaden of bedoel je streamen?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Dimby
  • Registratie: April 2008
  • Laatst online: 01-07-2024
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:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$bestand    = $_GET['bestand'];
$map        = '/var/www/bestanden/';

// Eerste kijken of het bestand uberhaupt bestaat.
if(file_exists($map.$bestand))
{
    // Force the download
    header("Content-Disposition: attachment; filename=\"" . basename($map.$bestand) . "\"");
    header("Content-Length: " . filesize($map.$bestand));
    header("Content-Type: application/octet-stream;");
    
    //Dit om gezeik met IE en HTTPS te voorkomen
    header('Cache-Control: private');
    header('Pragma: private');
    
    //Dit omdat we niet willen cache'n
    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    
    readfile($map.$bestand);
}else{
    echo '<p>Sorry, dit bestand bestaat niet!</p>';
}
?>


Kan dus een slotje op

Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 25-09 21:17

beany

Meeheheheheh

Wat heeft dit te maken met het beveiligen van films?

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Dimby schreef op vrijdag 28 november 2008 @ 16:13:
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:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$bestand    = $_GET['bestand'];
$map        = '/var/www/bestanden/';

// Eerste kijken of het bestand uberhaupt bestaat.
if(file_exists($map.$bestand))
{
    // Force the download
    header("Content-Disposition: attachment; filename=\"" . basename($map.$bestand) . "\"");
    header("Content-Length: " . filesize($map.$bestand));
    header("Content-Type: application/octet-stream;");
    
    //Dit om gezeik met IE en HTTPS te voorkomen
    header('Cache-Control: private');
    header('Pragma: private');
    
    //Dit omdat we niet willen cache'n
    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    
    readfile($map.$bestand);
}else{
    echo '<p>Sorry, dit bestand bestaat niet!</p>';
}
?>


Kan dus een slotje op
Ermmm waar zit de security?
En je weet dat je via dit script elk bestand kan downloaden die je maar wil?

En wie is Arjan Kapiteijn?

[ Voor 5% gewijzigd door LuCarD op 28-11-2008 16:25 . Reden: was de commentaar vergeten :) ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Icey
  • Registratie: November 2001
  • Laatst online: 26-09 11:26
Door een andere $_GET['bestand'] mee te geven kan je ook terug in de directory.

Acties:
  • 0 Henk 'm!

  • Dimby
  • Registratie: April 2008
  • Laatst online: 01-07-2024
Tuurlijk zitten er beveiligingen op, dit is het script wat ik heb gekregen op een ander forum. Ik heb het helemaal ingebouwd en beveiligd ;)

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 10:28

krvabo

MATERIALISE!

?bestand=..\config.php
Woehoe.
Dimby schreef op vrijdag 28 november 2008 @ 16:31:
Tuurlijk zitten er beveiligingen op, dit is het script wat ik heb gekregen op een ander forum. Ik heb het helemaal ingebouwd en beveiligd ;)
Dan hoop ik dat je bovenstaand ook hebt afgevangen, want dat script is geenszins een beveiliging verder. Als je de bestandsnaam weet (en die geef je mee..) dan kan je alsnog gewoon het bestand downloaden (Al weet ik niet op wat voor manier je een "CPanel" (.htaccess prolly)-beveiliging hebt ingesteld)

[ Voor 105% gewijzigd door krvabo op 28-11-2008 16:37 ]

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • soulrider
  • Registratie: April 2005
  • Laatst online: 27-11-2017
ajax is geen beveiliging eh: die code draait op de client en kan dus gerust gesniffed worden of aangepat worden naar eigen smaak... (goeie rant op TS: waar the hell haalde het btw vandaan dat ajax = security ?)

je hebt nu wel een serieus gat geslagen in de security van je server (en/of je php-scripts)

$bestand = $_GET['bestand'];
$map = '/var/www/bestanden/';

// Eerste kijken of het bestand uberhaupt bestaat.
if(file_exists($map.$bestand))

readfile($map.$bestand)

als ik een ?bestand=../'naam php file'.php doe, dan lees ik je code, en kan ik zo nog verder ....
(of in't slechtste geval zelfs een ../../etc/'pasword-file' enzo ...)

je moet altijd je $_GET variabelen controleren op valid-input en niet pas bij een 'als bestand bestaat'...

doe dat bv met een post - ik kan die get sniffen en replayen en diezelfde file ook binnenhalen, of als de bestandnaam raadbaar is de ?bestand=... aanpassen naar wat ik wil en ik haal nog alles binnen
(met post kan dat ook,maar is toch iets lastiger)

doe het bv via een database:
userid 'heeft betaald voor' 'lijst film-id's' en dan bij
get (userid, filmid): heeft user er voor betaald ? en zo ja waar zit die file eigenlijk ? (en mss tellertje bijhouden: 'al zoveel keer afgehaald' )
als je dan ook nog werkt met een goede implementatie van sessie's zodat een reply niet kan, is het al een pak veiliger. (je kan met sessieid ipv userid werken, en iemand die gaat gokken op userid's en filmid's kan geen lijst genereren wie welke film heeft aangekocht of hem alsnog op iemand anders rekening afhalen)

en als je dan nog wat controle doet bij 'user-input' - en dus alles wat of $_post, $_get, ( ev. ook $_cookie en ev. $_sessie) dan spijker je al veel 'exploitbare' gaten dicht ;)

verdomme veel te laat, en ik zeg hetzelfde als de laatste in het hierboven gepost topic
btw aan TS: leuk dat je crosspost op verschillende fora, maar dat wilt nog niet zeggen dat je copy-past alles moet herhalen eh ;) je had hier kunnen zeggen dankzij x via forum ...
nu is hier telkens exact hetzelfde gezegd als op dat phphulp-topic en dus verloren moeite en tijd voor ons ...

en TS: weet ons hier gerust de link door te spelen zodra die site online is eh ;)

[ Voor 18% gewijzigd door soulrider op 28-11-2008 16:55 ]


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 26-09 20:57

Sebazzz

3dp

Vertrouw de client nooit!

Dit is een vuistregel die je bij alles moet aanhouden als je op het web werkt.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Ik heb dat andere topic ook ff gelezen, en hij heeft die GET helemaal niet aangepast terwijl de persoon aangeeft dat dat 100% noodzakelijk is :D

https://niels.nu


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

De opmerking van de TS is wel het mooist:
Bedankt voor de reacties, ik denk dat ik Arjan Kapteijns reactie neem. Maar wat gebeurt daar precies?
Ik kopier wat, en hoop dat er wat gebeurt, zonder ook maar iets ervan te weten.

Zoals al gezegd word. Het is geen nette oplossing. Verdiep je eens in wat je gaat proberen te doen ipv zomaar wat code kopieren. Daar heb je zelf natuurlijk niets aan. Dan kan je beter op zoek gaan naar een softwarepakket die alles al doet wat je wilt.

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Als ik iemand een link wil sturen met de film, dan kan ik ook wel even mijn inlog gegevens sturen. Dat zal je toch ook allemaal moeten beveiligen. Slechts 1 download per dag bv, linken aan IP, etc etc. Ach, en dan down je gewoon zelf de film (pr0n? :D ) en zet je het op je torrent server.

Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 08:49

voodooless

Sound is no voodoo!

Lijkt me dat je iedere gebruiker die recht op de film heeft een eigen dedicated URL ter beschikking wil stellen, die verwijst naar de echte film data. Dat kun je bijvoorbeeld doen met een voldoende lange hash, of je checkt op je session of de user ingelogd is (of beiden).

Do diamonds shine on the dark side of the moon :?

Pagina: 1