theoberlin
Goto Top

Dateien hinter PHP Passwortschutz schützen

Hallo zusammen,

folgende Ausgangssituation:

Ein Link führt zu einem Verzeichnis mit einer Index.php. Dort wird festgestellt, dass eine Session Variable nicht gesetzt ist und man wird zu einem Login geführt. Nach erfolgreichem Login geht es wieder zurück und man bekommt alle Dateien aufgelistet, welche in diesem Verzeichnis liegen.

Nun zum Problem:
Kennt man den Dateinamen, kommt man durch „https://Blabla.blabla/download/blabla/test.txt“

direkt zur Datei ohne das Passwort eingeben zu müssen.

Hat jemand hier einen Lösungsvorschlag außer über ein separates backend zu gehen?

LG
Theo

Content-Key: 502707

Url: https://administrator.de/contentid/502707

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: erikro
erikro 09.10.2019 um 15:54:41 Uhr
Goto Top
Moin,

das Zauberwort heißt htaccess. Guckst Du hier:
https://wiki.selfhtml.org/wiki/Webserver/htaccess

hth

Erik
Mitglied: theoberlin
theoberlin 09.10.2019 aktualisiert um 16:12:41 Uhr
Goto Top
Moin Erik,
habe ich mir schon fast gedacht, bin aber auf keinen grünen Zweig gekommen.

Zugriff Deny für !Localhost geht ja nicht da in der .php auf den Link geklickt wird und Optionen die den direkten Download verhindern sind mir da nicht bekannt. Verzeichnislisting an sich ist natürlich auch abgeschaltet. Kannst du mir ein Stichwort geben?

Edit: Sehe gerade noch woanders:

https://www.askapache.com/htaccess/

Hotlinking/Refferer. Sehe ich mir mal an.

LG
Theo
Mitglied: erikro
erikro 09.10.2019 um 16:13:45 Uhr
Goto Top
Moin,

Zitat von @theoberlin:
Zugriff Deny für !Localhost geht ja nicht da in der .php auf den Link geklickt wird und Optionen die den direkten Download verhindern sind mir da nicht bekannt. Verzeichnislisting an sich ist natürlich auch abgeschaltet. Kannst du mir ein Stichwort geben?

Ich würde die Dateien in ein Unterverzeichnis packen, dann auf der Startseite das Login, der den Zugriff auf das Unterverzeichnis freigibt. Nach dem Login auf die Seite mit dem Listing weiterleiten und gut ist.

hth

Erik
Mitglied: theoberlin
theoberlin 09.10.2019 um 16:23:36 Uhr
Goto Top
Hi,

aber das behebt ja das Porblem nicht, dass wenn man das Unterverzeichnis mit Datei kennt, ohne Login draufkommt oder habe ich da einen Denkfehler?

lg
Theo
Mitglied: erikro
erikro 09.10.2019 um 16:27:03 Uhr
Goto Top
Nein, wenn in dem Unterverzeichnis ein entsprechendes .htaccess liegt, dann bekommst du ohne Authentifizierung einen Error 401. Sonst wäre das ja sinnbefreit. face-wink
Mitglied: 141320
Lösung 141320 09.10.2019 aktualisiert um 16:35:46 Uhr
Goto Top
Ich würde den Download nicht über einen direkt erreichbaren Link im Webspace realisieren sondern es folgendermaßen machen.
  • Download-Verzeichnis mit einer generellen .htaccess schützen so das ein direkter Zugriff nicht möglich ist / Alternativ das Download-Verzeichnis außerhalb des Webroots platzieren
  • Dann bei Check der Sessionvariablen dem User den Download per php readfile()-Funktion und passendem Header aus dem Dateisystem des Webservers auslesen und an den Browser ausliefern, so ist kein direkter Link mehr möglich und nötig.

Alternativ kannst du natürlich per htaccess und rewrite jegliche Anfrage an ein Download-Verzeichnis an ein Skript umleiten und dann die Session-Variable checken und die Datei ebenfalls pre readfile() an den Browser ausliefern.

Diese Methoden findest du in diversen fertigen Download-Skripts im Web.
Mitglied: erikro
erikro 09.10.2019 um 16:39:41 Uhr
Goto Top
Moin,

Zitat von @141320:

Ich würde den Download nicht über einen direkt erreichbaren Link im Webspace realisieren sondern es folgendermaßen machen.
  • Download-Verzeichnis mit einer generellen .htaccess schützen so das ein direkter Zugriff nicht möglich ist / Alternativ das Download-Verzeichnis außerhalb des Webroots platzieren
  • Dann bei Check der Sessionvariablen dem User den Download per php readfile()-Funktion und passendem Header aus dem Dateisystem des Webservers auslesen und an den Browser ausliefern, so ist kein direkter Link mehr möglich und nötig.

Alternativ kannst du natürlich per htaccess und rewrite jegliche Anfrage an ein Download-Verzeichnis an ein Skript umleiten und dann die Session-Variable checken und die Datei ebenfalls pre readfile() an den Browser ausliefern.

Diese Methoden findest du in diversen fertigen Download-Skripts im Web.

Sag ich doch. face-wink

Guck mal hier: https://wiki.selfhtml.org/wiki/PHP/Tutorials/Loginsystem

hth

Erik
Mitglied: LordGurke
Lösung LordGurke 10.10.2019 um 01:45:02 Uhr
Goto Top
Im großen und ganzen hast du folgende Möglichkeiten:

a) Du verlagerst die zu herunterladenden Dateien in ein eigenes Verzeichnis und unterbindest per .htaccess alle Zugriffe darauf.
Einfach eine Zeile: "Deny from all".
Bonus: Du verschiebst das Verzeichnis irgendwohin außerhalb deines Document-Root, dann kann kommen wer will - es gibt ja keinen direkten Zugriff darauf.
Alle Anfragen auf die Dateien müssen dann aber durch ein PHP-Script durchgeführt werden, was dann entsprechend die korrekten Content-Type:-Header setzen und die Dateien dann mittels readfile() ausliefern muss.
Problematisch ist das aufgrund der max_execution_time, welche bei sehr, sehr langsamen Downloads dann irgendwann abbricht und der Download ebenfalls endet. Hier kannst du eventuell selektiv für dieses Script die max_execution_time abschalten, wenn das zugelassen wird.
Im Falle von PHP-FPM bzw. FCGI springt möglicherweise noch der Webserver aus dem Gebüsch und bricht das Script nach einem Timeout (meist 300 Sekunden) ab.

Dies ist so mit die simpelste und zugleich sicherste Lösung - aber halt mit dem Nachteil der max_execution_time. Wenn du diese abschalten kannst, wäre das die präferierte Lösung.


b) Du setzt mit dem PHP-Script einen Cookie, welcher nur für die aktuelle Session gültig ist und prüfst dann dessen Existenz mittels .htaccess. Eine wirklich Auswertung/Prüfung gegen eine PHP-Session kannst du damit aber nicht machen - lediglich den Cookie und dessen Inhalt statisch vergleichen.
Das lässt sich daher auch clientseitig ausnutzen, indem ein solcher Cookie natürlich auch ohne Login gesetzt werden kann.
Dafür kannst du den Download ohne PHP-Script umsetzen, durch das die Daten durchfließen müssen und du hast keine Gefahr abbrechender Downloads.

Vorteil: Der Download kann so lange dauern wie er eben dauert, ohne die Gefahr abbrechender Downloads - dafür ist der Schutz für geübtes Personal dann aber auch relativ leicht zu umgehen.