Video-Files vor direktem Download schützen
Jonas
- webserver
0 berdn1 Alexander (HH)0 frankx
Hallo zusammen
Ich habe folgendes Problem / Ziel:
Ich möchte, dass auf meinem Server ghostete Video-Dateien (.wmv, grösser als 100 MB) nicht direkt in Foren oder auf anderen Seiten zum Download verlinkt werden können. Die Leute, die den Service nutzen wollen, sollen doch bitte einen Seitenaufruf und damit eine Werbeeinblendung in Kauf nehmen ;)
Meine Idee dazu wäre nun die folgende:
Ich leite den aufruf domain/[id]/dir1/film1.wmv via mod_rewrite auf ein script um, dem ich alles hinter domain/ als paramter übergebe. Sprich, das script erhält [id]/dir1/film1.wmv .
Nun "weiss" das script dank dir1/film1.wmv wo das file auf dem server liegt und überprüft über [id], ob die id stimmt. Diese id setze ich natülich bei jedem Aufruf der Datei über die Seite neu - zB auf den aktuellen timestamp+100 oder sowas.
Die Frage ist nun, ob es für mein Problem / mein Ziel eine bessere Lösung gäbe.
Zudem muss ich ja bei obiger Lösung das File mit Perl komplett öffnen, auslesen und wieder ausgeben.
Ist die Server-Belastung dabei deutlich grösser, als wenn die über 100 MB schwere Datei direkt über den Webserver (Apache) ausgegeben wird?
Grüsse und Danke im voraus für die Inputs von eurer Seite
Jonas
Hallo Jonas
bei wmv fällt mir nichts ein, mit flash müßte es aber gehen.
Grüße
Bernd
Moin Moin!
Vorab: Es gibt keine sichere Lösung, das ist technisch unmöglich.
Ein häufig gewählter Ansatz ist, zu überprüfen, ob der HTTP-Header "Referer" zu einem erlaubten Satz von verlinkenden Seiten paßt oder nicht. Stimmt der Header, wird die gewünschte Resource ausgeliefert, ansonsten etwas anderes, z.B. 403 Permission Denied, einen Redirect auf eine Ladeseite, oder eine "hier versucht jemand Bandbreite zu stehlen"-Resource.
Probleme bei diesem Vorgehen: Der "Referer"-Header kann beliebig gefälscht oder unterdrückt werden, und nicht jeder Browser sendet den "Referer"-Header unter allen Umständen. So wird z.B. bei einem "open in new window" der "Referer"-Header gerne mal weggelassen. Einige Browser erlauben sogar, das Senden dieses Headers komplett zu unterdrücken. Dieses Verhalten sollte bei der Prüfung berücksichtigt werden.
Alexander
Hellihello Jonas,
Meine Idee dazu wäre nun die folgende:
Ich leite den aufruf domain/[id]/dir1/film1.wmv via mod_rewrite auf ein script um, dem ich alles hinter domain/ als paramter übergebe. Sprich, das script erhält [id]/dir1/film1.wmv .
Da kannst Du überlegen, ob das nötig ist. Dir stehen (zumindest bei PHP) Servervariablen zur Verfügung, zB. die REQUEST_URI oder der QUERY_STRING. Das kann Dein Script also direkt ansprechen.
Nun "weiss" das script dank dir1/film1.wmv wo das file auf dem server liegt und überprüft über [id], ob die id stimmt. Diese id setze ich natülich bei jedem Aufruf der Datei über die Seite neu - zB auf den aktuellen timestamp+100 oder sowas.
Die Frage ist nun, ob es für mein Problem / mein Ziel eine bessere Lösung gäbe.
Wenn das Deine Bedürfnisse erfüllt, klingt es doch praktikabel.
Zudem muss ich ja bei obiger Lösung das File mit Perl komplett öffnen, auslesen und wieder ausgeben.
Ist die Server-Belastung dabei deutlich grösser, als wenn die über 100 MB schwere Datei direkt über den Webserver (Apache) ausgegeben wird?
Ist das so? Schau mal hier http://www.php-faq.de/q/q-datei-download.html; dürfte wohl der Logik nach auf Perl übertragbar sein.
Gruß,
frankx