Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Apache][MySQL][PHP?] Beveiligen website met video's

Pagina: 1
Acties:

  • BastiaanCM
  • Registratie: Juni 2008
  • Laatst online: 09:21
Goedendag,

Ik zit met het volgende probleem en kom er niet helemaal uit. Nouja, nou heb ik wel een oplossing maar die werkt niet goed genoeg:

Ik heb een webservertje draaien met Apache. Hier draait een simpele website op met een video. (In een boel .ts bestandjes, HLS stream). Voor de werkelijke site moet een login staan, die communiceert met een MySQL database.

Nou heb ik al wel een PHP pagina met login, en dan is de website alleen te bezoeken als men ingelogd is. Echter is er niets dat voorkomt dat de gebruiker direct naar de videobestanden linkt en in zijn mediaspeler afspeelt. (Dat is poging 1.)

Nou heb ik ook gekeken naar de apache modules, en er is er een die heet mod_auth_mysql. Na een hoop ongein met out-of-date documentatie :( is die wel aan de praat. Bij het bezoeken van de website krijg je dan een http authenticatie popup, en dan wel/niet de juiste pagina. Dit gaat op zich goed, ware het niet dat ook de filmbestanden achter deze authenticatie zitten. Het lijkt erop dat apache per bestandje opnieuw de database raadpleegt. Hierdoor laad het filmpje vrijwel niet. En dat is natuurlijk helemaal een drama als de gebruiker gaat "spoelen". Deze module lijkt ook niet te kunnen cachen ofzo. (Poging 2.)

Poging 3 heb ik geprobeerd mod_authn_dbd te gebruiken, die module zit standaard in apache itt de vorige. Deze, zo kwam ik ergens tegen, zou wel caching moeten ondersteunen en misschien beter werken. Hierbij moet je wel zelf een database driver hebben, dus geinstalleerd. (libaprutil1-dbd-mysql). Bij deze krijg ik alleen maar errors in de error log, als ik Apache herstart. ([error] (20014) Internal Error: DBD: Can't connect to mysql.
Of, want ik draai linux en daar bleek standaard sqlite3 in te zitten, dezelfde error maar dan Cant connect to Sqlite3.

Dus hierbij de vraag of jullie misschien een beter idee hebben om het te regelen.. Ik kom er niet echt meer uit.

  • Gtoniser
  • Registratie: Januari 2008
  • Laatst online: 22:47
Maar wat is precies je doel? Voorkomen dat gebruikers de video in hun eigen player afspelen of downloaden? Of wil je voorkomen dat ze de directe link sharen?

Omdat je veel bestanden hebt lijkt het me dat de enige optie is om alles te rewriten naar een PHP bestand en dat PHP dan checkt of de user toegang heeft en dan het bestand streamt. Niet geweldig maar het kan werken.

Lighttpd heeft trouwens wel een module waarmee je file keys kunt generaten en de toegang dan in de url verwerkt :)

  • BastiaanCM
  • Registratie: Juni 2008
  • Laatst online: 09:21
Het doel is puur te voorkomen dat men de site login omzeilt en direct bij de bestanden kan.(Zoals bij php oplossing) Volgens mij kan dit ook door de te kijken naar de http referer, maar die is ook gemakkelijk te forgen. Het liefst met zo min mogelijk vertraging, zodat het bijna even snel is als de site zonder beveiliging.

Jouw 2e oplossing ben ik tegen gekomen, maar ik geloof gelezen te hebben dat alle files dan door die php module moet en dit vrij traag werkt bij grotere bestanden (?).

De derde, file keys. Weet niet of ik daar wel wat voor voel. Sowieso kan ik er niet veel over vinden, en twijfel of dat een oplossing is voor livestreams.

  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
Kijk eens naar X-sendfile

Specialist in:
Soldeerstations
Oscilloscoop


  • BastiaanCM
  • Registratie: Juni 2008
  • Laatst online: 09:21
Betwijfel dat dat gaat werken. Bij HLS heb je namelijk een index.m3u8 waarin de namen zitten van de video.ts files. Een nieuw .ts file elke 10 seconden. Dan zou je een script moeten schrijven dat elke 10 seconden index.m3u8 opnieuw binnen haalt en daar uit het laatste .ts bestand haalt. Wat overigens al gedaan word door de videoplayer zelf. Ik gebruik gewoon video tag. (HTML 5 <video "src=index.m3u8" controls autoplay>

[ Voor 3% gewijzigd door BastiaanCM op 16-05-2013 13:13 ]


  • Dennahz
  • Registratie: November 2001
  • Laatst online: 11:22

Dennahz

Life feels like hell should.

Ik volg even mee. Heb binnenkort ook een dergelijk project.
Uiteindelijk is de bedoeling dat men in kan loggen en pas na login de video kan zien. Zien, niet downloaden. Dus werken met een player die een FLV streamt is sowieso niet echt handig.

Uiteindelijk moet de player toch ergens z'n beeld vandaan halen. Op het moment dat de video wordt afgespeeld kunnen ze het altijd downloaden/capturen/...

Twitter


  • BastiaanCM
  • Registratie: Juni 2008
  • Laatst online: 09:21
Aye, dat is niet erg. Het punt is alleen dat ik een inlogpagina ervoor wil die niet 123 te omzeilen is :P

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
dit kun je evt. zo oplossen (weet niet of het de beste oplossing is):

in je .htaccess file redirect je iedere request op je /video folder naar /video.php

in je video.php check je of de gebruiker is ingelogd...

IF NOT:
header("location: login.php");

IF INGELOGD:
d.m.v. een stream de filenaam (evt. in zijn subdir) streamen naar de client

voor extra veiligheid (voor het geval je een keer je .htaccess file sloopt / wist / etc) kun je de videofiles ook nog eens buiten de webroot plaatsen en bij het streamen ophalen van de daadwerkelijke lokatie

[ Voor 23% gewijzigd door P.O. Box op 16-05-2013 16:05 ]


  • 418O2
  • Registratie: November 2001
  • Laatst online: 21:50
P.O. Box schreef op donderdag 16 mei 2013 @ 16:03:
dit kun je evt. zo oplossen (weet niet of het de beste oplossing is):

in je .htaccess file redirect je iedere request op je /video folder naar /video.php

in je video.php check je of de gebruiker is ingelogd...

IF NOT:
header("location: login.php");

IF INGELOGD:
d.m.v. een stream de filenaam (evt. in zijn subdir) streamen naar de client

voor extra veiligheid (voor het geval je een keer je .htaccess file sloopt / wist / etc) kun je de videofiles ook nog eens buiten de webroot plaatsen en bij het streamen ophalen van de daadwerkelijke lokatie
dat wou ik dus ook voorstellen :)

  • Gtoniser
  • Registratie: Januari 2008
  • Laatst online: 22:47
BastiaanCM schreef op donderdag 16 mei 2013 @ 13:13:
Betwijfel dat dat gaat werken. Bij HLS heb je namelijk een index.m3u8 waarin de namen zitten van de video.ts files. Een nieuw .ts file elke 10 seconden. Dan zou je een script moeten schrijven dat elke 10 seconden index.m3u8 opnieuw binnen haalt en daar uit het laatste .ts bestand haalt. Wat overigens al gedaan word door de videoplayer zelf. Ik gebruik gewoon video tag. (HTML 5 <video "src=index.m3u8" controls autoplay>
Waar is dat script dan voor nodig? Als je met .htaccess en PHP de .ts bestanden afvangt kun je met X-sendfile dus als een request geldig is gewoon het juiste .ts bestand sturen.
Dus een combinatie van dit + wat P.O. Box hierboven zei lijkt me prima werken.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Alternatieve werkwijze die ik ooit wel eens toegepast heb :
Gebruik een php-bestand om je video-files klaar te zetten in een random apache-map (move / copy/hardlink/vhost/apache config aanpassen) en mieter de random mappen periodiek weg.

Doordat je php-bestand het in gang heeft gezet weet die waarnaartoe de gebruiker verwezen moet worden en daarna is het rechtstreeks via apache streamen.
Pagina: 1