Lieber Frank,
nehmen wir einmal an, Du hättest alle Dateien, die man downloaden können soll, in einem Ordner namens "geheim" versteckt, der auch wegen eines (nicht definierten) Passwortes über den Browser unerreichbar ist. PHP ist jedoch auf Dateisystem-Ebene durchaus in der Lage, diese Datei zu lesen und zu schreiben. Daher könnte ein Script auf diese Daten auch von anderer Stelle aus zugreifen.
Nehmen wir weiter an, dass Deine Verzeichnis-Struktur so aussieht:
DocumentRoot
|
+--- download.php
|
|
+--- geheim
| +-- unterordner
| | |
| | +-- bild_a.gif
| | |
| | +-- bild_b.gif
| |
| +-- .htaccess
| |
| +-- datei1.dat
| |
| +-- datei2.dat
|
+-- anderer_ordner
| |
| +-- datei_xyz.php
Nun testen wir einen Browseraufruf direkt: http://example.org/geheim/datei1.dat
Dieser Request wird mit einer Nachfrage nach Benutzernamen und Passwort quittiert, da wir in der .htaccess definiert haben, dass man eine gültige Authentifizierung braucht, um dort erfolgreich eine Datei zu erhalten - aber da es keine gültige Authentifizierung gibt, endet der Zugriff im Nichts. Schön! Dasselbe geschieht übrigens mit allen Dateien in eventuellen Unterordnern von "geheim" auch.
Nun rufen wir ein PHP-Script auf. In diesem Beispiel ist es im DocumentRoot, könnte aber im Prinzip auch in einem beliebigen anderen Unterverzeichnis liegen, nur nicht in geheim...
http://example.org/download.php?f=datei1.dat
Das PHP-Script kann nun prüfen, ob der Benutzer sich korrekt angemeldet hat (siehe Session-Mechanismus in PHP!), um im Erfolgsfalle die Datei "/geheim/datei1.dat" per readfile() an den Browser auszugeben.
Analog könnte man auch den Unterordner dieses Beispiels benutzen:
http://example.org/download.php?f=unterordner/bild_a.gif
WICHTIG!!! Du müsstest unbedingt sicherstellen, dass der User nicht mit so bösen Requests kommt, dass er aus völlig falschen Ordnern Dateien abrufen kann! Beispiel: http://example.org/download.php?f=../anderer_ordner/datei_xyz.php
Hier hättest Du ein massives Sicherheitsrisiko!
Klarer geworden, was ich meine?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)