Frage von Rocket330, 49

Mit PHP Login Videos in einem Verzeichniss schützen?

Hallo, ich habe auf meinem Apache 2 Webserver im Verzeichniss "/ALL" ca. 100 Videos mit je 3GB größe liegen, welche ich gerne per Passwort und Login schützen will. Und an alle: .htaccess kommt nicht in Frage, weil ich das etwas schöner gestalten will. Ich habe ein perfekt funktionierendes Login Script wo sich Nutzer Registrieren und auch Einloggen können. Wenn ich mich nun einlogge komme ich auf eine index.php wo alle Videos augelistet und auch angeschaut werden können. Wenn man nicht eingeloggt ist wird nichts angezeigt.

Das Problem: Personen welche nicht eingeloggt sind können einfach in das Verzeichniss "/ALL" gehen und gemütlich alle Videos ohne Login anschauen.

Kann man das irgendwie hinbekommen die Videos zu schützen ?

Liebe Grüße und Danke im Vorraus!

Antwort
von RakonDark, 32

dafür kannst du eine datenbank nehmen und ein downloadscript welches dann natürlich den user überprüft .

vielleicht hilft dir ja mein kleines script

https://github.com/sheinatz/tools/tree/master/download

logic ist also nicht direct zu verlinken , sondern einen download link und dieser gibt dann die datei als download aus , bzw müsstest du es so anpassen das es eben als video stream ausgeliefert wird . das download.php überprüft dann via SESSION ob der download (bzw stream) vom erlaubten login kommt , du kannst das videoverzeichnis auch ausserhalb des html root legen , das ist am sichersten .


Kommentar von RakonDark ,

bzw bei mir im tool ist es die index.php die den download organisiert .

Antwort
von Leschge, 29

erstelle einfach im Verzeichniss "/ALL" eine index.html oder index.php die dich wieder zur Hauptseite weiterleitet oder anzeigt, dass du dich einloggen musst.

Ist eine index Datei im Verzeichniss vorhanden, so wählt der Server immer diese automatisch aus um genau soetwas zu verhindern.

Kommentar von RakonDark ,

das bringt ja wenig wenn die direkte url für das video genutzt wird , dann würde der player ja auch keine datei finden . bzw auf index.php landen .

Kommentar von RakonDark ,

ups, dann würde zwar das verzeichnis (wenn überhaupt eingeschaltet ist) nicht sichtbar , aber der direkte link wäre immer noch erreichbar .

Kommentar von Leschge ,

Hmm da fällt mir leider nichts spontan ein, außer du prüfst mit php ab, ob er eingeloggt ist oder du speicherst den Link des Videos in einer Variable, die nicht ausgegeben wird.

Antwort
von perhp, 7

Verzeichnisse kannst du auch in der robots.txt deaktivieren, sodass sie nicht öffentlich zugänglich sind.

Antwort
von RedKungFuMastr, 22

Wenn du so etwas vermeiden willst, dann brauchst du ein zentrales Script, welches der Einstiegspunkt der Webseite ist. Über dieses Script verwaltest du dann die Routen.

Falls jemand auf die entsprechende Route kommt, fragst du nach der Authorisierung des Nutzers. Falls der Nutzer nicht authorisiert ist, die Route zu nutzen, kannst du den Nutzer auf eine andere Route umleiten.

Warum nutzst du kein CMS für solche Sachen? Ich empfehle Laravel (https://laravel.com/)

Kommentar von Rocket330 ,

Ok... ich habe es jetzt so gemacht das alle Video in der Seite eingebettet sind und ageschaut werden können. In das Verzeichniss /ALL habe ich eine .htaccess welche nur zugriff von php datein zulässt. Bisher perfekt, weil ich kann die Videos nach dem Login anschauen und das Verzeichniss /ALL ist auch geschützt. Das Problem ist: die htaccess verhindert nicht das das Video über den Direktpfad angeschaut werden kann..

Kommentar von RedKungFuMastr ,

Dein Ansatz ist falsch. Du solltest in der htaccess zu stehen haben, dass nur dein Zentralscript angesprochen werden kann.

Den Rest mit den Routen überlässt du deinem $_GET Parametern und dem Zentralscript.

Wenn dann einer auf domain.com/all/videos geht, wird der Nutzer sofort zurückgeleitet, da der Pfad "nicht existiert". Der Nutzer müsste die URL folgendermaßen eingeben: domain.com/?page=videos&video=1

<?php #index.php

$login = ... // dein Loginzeug...

if( isset($_GET) ) {

   if(isset($_GET['page'])) {

      switch($_GET['page']) {
         case 'home':
            // include 'homepage.php'; // template
         break;

         case 'videos':
            if( !$login ) { // user not logged
                echo 'GET THE HELL OUTTA HERE';
            } else { // user logged
                echo 'GET YOUR VIDS';
            }
         break;
      }
   }
} else {
   // include 'homepage.php';
}

Den Rest mit dem Video, kannst du über PHP auch handeln, s. Beitrag: http://stackoverflow.com/questions/4624012/how-to-download-the-video-using-php-s...

Kommentar von Rocket330 ,

Ich glaube du hast mein Problem nicht komplett verstanden... Es ist so ich habe eine index.php in welcher die Videos welche im Verzeichniss /ALL/ als .mp4 liegen angezeigt werden. Ist man nicht eingeloggt wird man zum Login umgeleitet und bei erfolg auf die index.php zurück. Ich habe jetzt auch Directory Listeening aus, sodass kein Verzeichniss aufgerufen werden kann. Das Problem ist nur das jeder trotzdem wenn er einmal eingeloggt war, oder den Pfad einzelner Videos kennt diese aufrufen kann. Ich habe gehört man kann in der .htaccess einstellen das nur php scripts dateien abrufen dürfen... das klappt bei mir nur für das Verzeichniss aber nicht für die Dateien. Danke für deine Hilfe!

Kommentar von RedKungFuMastr ,
# videos/video[1..n].mp4
# videos/.htaccess -> deny from all
# templates/home.php
# templates/videos.php
# public/index.php
# download/video.php

Mach so eine Verzeichnisstruktur und deine Domain zeigt auf den Ordner "public". Somit kommt keiner mehr auf das Verzeichnis "videos".

Wenn der Nutzer jetzt Videos herunterladen oder aufrufen möchte, wirft die index.php das Script von download/video.php an.

Wie siehts damit aus?

Kommentar von RedKungFuMastr ,

Damit das Video als eingeloggter User auch aufrufbar ist im Browser, musst du mit Tokens arbeiten.

Deine Source für dein Video würde eine PHP Datei sein, die über den $_GET Parameter einen Token verifiziert und erst nach Erfolg dein Video übergibt. Du musst den entsprechenden header() setzen für das Video.

Bei solchen Sachen musst du auf die Sicherheit deiner Seite achten. Ich empfehle hierbei diese Seite zu lesen: https://www.owasp.org/index.php/Main_Page

Antwort
von Malemeister, 4

Einfach in dem Pfad wo die Videos drinne liegen eine .htaccess anlegen und den kompletten Zugriff verweigern. Eben nur dein index.php darf auf dieses Verzeichnis zugreifen. Wenn du es dann noch ganz hübsch machen willst, leitest du die User mittels htaccess dann auf deine index.php weiter.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten