Mailinglisten-Archive |
Hallo, > Ich bin gerade mit der Realisation eines Up-/Downloadtools > in php beschäftigt. Eines meiner grundlegenden Probleme ist: > Wie und Wo bringe ich die Dateien unter, damit sie nur nach > Authorisierung durch das php-tool downgeloaded bzw. > upgeloaded werden können? Zufälligerweise habe ich genau sowas gerade vor kurzem auch gebraucht. (D.h. genaugenommen nur für den Download, aber Upload läuft entsprechend). > Meine momentane Lösung sieht die Speicherung in > einem Skript-Verzeichnis (ExecOnly) vor. Download würde > also nur funktionieren, wenn die Datei durch ein php-Modul > durchgeschleust wird, welches die Datei einliest und an den > Browser weiterleitet. Jawoll... Wobei ich persönlich ein Verzeichnis komplett außerhalb des Serverroots bevorzugen würde. Das muss dann auch nicht "ExecOnly" sein. > Gibt es noch eine bessere Lösung? > Kennt jemand fertige Up/Download-Tools mit > Rechteverwaltung unter php? Nö. Ist aber auch nicht sooo schwierig selbst zu machen. Und außerdem individueller! ;-) Mein "Secure Download Wrapper" sieht jedenfalls ungefähr so aus (Kommentare im Source): ----------------- <?php // "security wrapper" zum files downloaden/ansehen // // Hinweis: Ich habe für die Authentifizierung und Autorisierung die PHPLIB // genommen (IMHO sehr empfehlenswert) - das Prinzip sollte aber auch ohne // PHPLIB funktionieren. // Gleich ´raus falls keine Parameter gegeben: if (!isset($f) or !isset($dt)) { exit; } // $f ist der Pfad zu der Datei die downgeloadet werden soll (Achtung: // so wie´s hier ist besteht ein mögliches Sicherheitsloch darin, daß ein // user eine bekannte Datei auf dem Server "ausspähen" könnte. "in real life" // muss $f also noch überprüft werden (und/ oder z.B. an einen festen Pfad // angehängt werden) // $dt ist der "document type", d.h. der MIME type. // Das hier ist der function call zum "öffnen" einer Seite für die PHLIB // Er stellt sicher, daß der User auch angemeldet ist, bzw. eine gültige // Session hat - wenn nicht, bekommt er einen Login-Screen page_open (array ("sess"=>"DMPS_Session","auth"=>"DMPS_Auth","perm"=>"DMPS_Perm")); // Ohne PHPLIB müsstest Du halt an dieser Stelle irgendwie selbst feststellen, // ob bzw. welcher User angemeldet ist usw... // Hier wäre der richtige Platz, um spezifische Rechte zu checken (falls z.B. // manche User nur bestimmte Sachen downloaden dürfen etc.): // bei PHPLIB wäre das dann z.B. $perm->check("admin"); // Hier wird jetzt der korrekte MIME-type anhand von $dt ermittelt und gesendet // z.B. if ($dt == "pdf") { header ("Content-type: application/pdf"); } else { // in meinem Fall brauchte ich außer bei PDF keine korrekten MIME-types // also schicke ich bei allen "nicht-PDFs" einen "Standard-Header" // für binaries: header ("Content-type: application/octet-stream"); // BTW: Dieses "feature" könnte man auch nutzen, um ein downloaden // von filetypen zu erzwingen, die sonst z.B. direkt im Browser // (oder durch ein Plugin) angezeigt werden würden } // Jetzt den Filenamen setzen (kann sich natürlich vom "echten" unterscheiden) header ("Content-disposition: inline; filename=$f"); // und die Länge...: $length = filesize($f); header ("Content-length: $length"); // Hier erfolgt das eigentlich Einlesen bzw. "Durchreichen" der Datei: readfile ($f); page_close(); // analog zu page_open() - sagt der PHPLIB, daß hier die seite "aufhört" // (schreibt Session-Daten in die DB usw.) ----------------------- Das war´s schon. Hoffe das gibt einen ersten Anhaltspunkt. CU, Manuel -- Quote of the month: "The parade that´s electrical, it serves no real purpose Takes up a lot of juice, just to impress us." (No Doubt, "Tragic Kingdom")
php::bar PHP Wiki - Listenarchive