Hallo,
»» »» Und ist diese Methode dann nicht auch von anderen möglich?
»» Wie meinst du das?
Damit war gemeint, wie ich verhinden kann, dass man z.B. durch Einfügen der Zeilen:
{ header("Content-Type: application/octet-stream"); // geeigneten HTTP-Header setzen
readfile("www.exaple.org/dataintern/" . $_GET['file']);
> von einer fremden Seite den Zugriff sperren kann.
wieso von einer \*fremden\* Seite? Wir waren uns doch schon einig, dass der HTTP-Zugriff auf das Verzeichnis /dataintern komplett unterbunden wird.
> Ich habe das Ganze jetzt wie folgt umgesetzt: (Falls mal jemand ein ähnliches Problem hat)
>
> ~~~php
> <?php
> session_start();
> if($_SESSION["loggedin"] == TRUE) { // wird von meiner auth.php gesetzt
>
> $allowedDir = array("dir1","dir2","dir3"); // erlaubte Verzeichnisse für den Download
>
> // erlaubte Dateien für den Download
> $allowedFile = array("file1.pdf","file2.zip","file3.jpg");
>
> if ( isset($_GET['dir']) && isset($_GET['file']) ) { // Wurden die Parameter übergeben?
> $dir = $_GET['dir'];
> $file = $_GET['file'];
>
> if ( in_array($dir, $allowedDir) && in_array($file, $allowedFile) ) { // Sind die Parameter erlaubt?
> header("Content-Type: application/force-download"); // geeigneten HTTP-Header setzen
> header("Content-disposition: attachment; filename=\"".$file."\"");
> readfile($dir."/".$file); // Datei durchreichen
> } else { // ungültiger Parameter
> echo "Fehler: Zugriff auf angegebene Datei nicht erlaubt.\n";
> }
> } else { // gar kein file-Parameter
> echo "Fehler: Kein Dateiname angegeben.\n";
> }
> } else {
> echo "Sie sind nicht eingeloggt.\n"
> }
> ?>
Okay. Eins nach dem anderen.
if($_SESSION["loggedin"] == TRUE)
Der explizite Vergleich eines boolschen Wertes mit der Konstanten true ist sinnfrei - ein einfaches 'if ($_SESSION["loggedin"])' erfüllt den gleichen Zweck und ist besser lesbar.
$allowedDir = array("dir1","dir2","dir3")
$allowedFile = array("file1.pdf","file2.zip","file3.jpg");
Ah, du willst verschiedene Verzeichnisse bedienen. Kann man so machen; ich würde aber die Kombinationen aus Verzeichnis und Dateinamen als Einheit sehen und nicht getrennt abfragen. Bedenke, dass mit deinem Ansatz *jede* Kombination aus Verzeichnis und Dateiname akzeptiert wird - in deinem Beispiel neun verschiedene Kombinationen, die bestimmt nicht alle existieren.
$dir = $_GET['dir'];
$file = $_GET['file'];
Wozu das Umkopieren?
header("Content-Type: application/force-download");
header("Content-disposition: attachment; filename="".$file.""");
Das sieht man ab und zu - aber im Gegensatz zu application/force-download, was frei erfunden ist, ist application/octet-stream standardisiert. Die nachfolgende Headerzeile Content-Disposition wäre nur nötig, wenn du einen Content-Type angibst, bei dem ein Browser auf die Idee kommen könnte, ihn selbst darzustellen.
Gute Nacht ebenfalls,
Martin
--
Success should be measured not so much by the position that one has reached in life,
but by the obstacles one has overcome while trying to succeed.