Autor |
Nachricht |
easteregg
Threadersteller
Dabei seit: 15.02.2003
Ort: Deutschland
Alter: 36
Geschlecht:
|
Verfasst Do 14.10.2004 15:16
Titel [PHP] Dateischutz |
|
|
Hi,
ich habe vor einen Download-Service zu starten. Da ich nicht unbegrenzt Traffic zur Verfügung habe möchte ich, dass man angemeldet sein muss, um die Datei runterladen zu können.
So. Nun darf die Datei aber nur einmal unter der jeweiligen URL liegen. Also User "XYZ" lädt die Datei "Test.zip" herunter. Für ihn ist die Download-URL "http://www.beispiel.de/download/8208237/Test.zip". Wenn er nun aber (pfiffig wie er ist) seinem Freund diese Download-URL weitergibt (damit der sich nicht anmelden muss) soll die Datei nicht mehr da sein.
Problem gut beschrieben?
Hoffe auf eure Antworten.
MfG,
easteregg
|
|
|
|
|
Eistee
Administrator
Dabei seit: 31.10.2001
Ort: Grimma
Alter: 45
Geschlecht:
|
Verfasst Do 14.10.2004 15:23
Titel
|
|
|
Also:
1) Alle downloads nur über ein Script, z.b. download.php?id=55642
2) Files liegen in Wirklichkeit ausserhalb des Webroots oder in einem Verzeichnis, an welches nur der Apache hinkommt. (Stichwort: htaccess DENY FROM ALL)
3. Beim Aufruf der download.php wird zuerst die Berechtigung gecheckt (Sessions oder wie du willst...), falls erfolgreich, wird das File vom Server geholt und mit den richtigen Headern (Filename etc.) an den Client geschickt.
Ich hoffe das ist als Denkanstoss ausreichend
|
|
|
|
|
Anzeige
|
|
|
easteregg
Threadersteller
Dabei seit: 15.02.2003
Ort: Deutschland
Alter: 36
Geschlecht:
|
Verfasst Do 14.10.2004 15:33
Titel
|
|
|
Eistee hat geschrieben: | 1) Alle downloads nur über ein Script, z.b. download.php?id=55642 |
Ok, ist klar
Eistee hat geschrieben: | 2) Files liegen in Wirklichkeit ausserhalb des Webroots oder in einem Verzeichnis, an welches nur der Apache hinkommt. (Stichwort: htaccess DENY FROM ALL) |
Komm ich auch noch mit
Eistee hat geschrieben: | 3. Beim Aufruf der download.php wird zuerst die Berechtigung gecheckt (Sessions oder wie du willst...), falls erfolgreich, wird das File vom Server geholt und mit den richtigen Headern (Filename etc.) an den Client geschickt. |
Da steig ich dann aus
Berechtigungscheck ist klar, aber wie hole ich das dann vom Server und schicke es mit den richtigen Headern an den Client?
P.S.: Danke Eistee
MfG,
easteregg
|
|
|
|
|
phreaknerd
Dabei seit: 04.10.2004
Ort: owschlag
Alter: 49
Geschlecht:
|
Verfasst Do 14.10.2004 15:38
Titel beispiel |
|
|
//Berechtigung checken... dann
//header senden je nach Dateityp anderer Header - für downloads oft "octet/stream" um das "Speichern unter" zu erzwingen...google mal
$f = fopen("Pfad zum nichtöffentlichenverzeichnis", "r");
fpassthrough($f); //gibt den Dateiinhalt direkt aus.
fclose($f);
fertig ist die wurst.
|
|
|
|
|
Eistee
Administrator
Dabei seit: 31.10.2001
Ort: Grimma
Alter: 45
Geschlecht:
|
Verfasst Do 14.10.2004 15:41
Titel
|
|
|
Richtige Header z.b. das beim User im Download Dialog net dransteht "download.php" speichern sondern "filename.zip" speichern. Oder um den Filetype etc anzugeben.
Beispiel: (allerdings ohne Gewähr *G*)
Code: |
header("Cache-control: private");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Length: ".filesize("/protected_folder/filename.zip"));
header("Content-Disposition: attachment; filename=\"filename.zip\""); |
Die einfachste Möglichkeit ne Datei auszugeben:
www.php3.de/readfile
|
|
|
|
|
karmacoder
Dabei seit: 15.04.2002
Ort: Fürth
Alter: 42
Geschlecht:
|
Verfasst Do 14.10.2004 16:15
Titel
|
|
|
macos9 oder browser wie ns 4.x haben damit probeleme, als dateiname wird das aufrufende script genommen,
der dateiinhalt ist in ordnung der user muss blos die datei selber umbebennen.
zum glück sind solche user sehr selten geworden, aber vielleicht sollte man das in irgendeiner hilfe/faq anmerken.
|
|
|
|
|
easteregg
Threadersteller
Dabei seit: 15.02.2003
Ort: Deutschland
Alter: 36
Geschlecht:
|
Verfasst Do 14.10.2004 16:25
Titel
|
|
|
Mh, also muss das Skript dann einfach nur die Header-Infos angeben (siehe Eistee)? Wie starte ich denn den Download? Mit readfile?
MfG,
easteregg
|
|
|
|
|
Eistee
Administrator
Dabei seit: 31.10.2001
Ort: Grimma
Alter: 45
Geschlecht:
|
Verfasst Do 14.10.2004 16:27
Titel
|
|
|
Die Header sagen dem Client "Achtung jetzt kommt ein Download, Name soundso, Grösse soundso", was du danach an Daten sendest ist egal, wird alles als Datei gespeichert,
Und mit readfile sendest du halt die komplette Datei.
|
|
|
|
|
|
|
|