Thomas: Bilder aus einem passwortgeschützten Ordner

Hallo zusammen,

Habe mal eine kurze Frage zu PHP.

Wenn ich über include() oder require() eine PHP-datei aus einem passwortgeschützten Ordner in mein Skript einbinde, wird das eingebundene Skript problemlos ausgeführt.
Ich kann es lediglich nicht durch einen direkten Aufruf starten (es sei denn ich kenne das Passwort).

Geht etwas ähnliches auch für Bilder?

Was ich suche ist die folgende Funktionalität:

Ich lege meine Bilder in einem passwortgeschützen Ordner ab, so dass niemand über die URL des Bildes direkt auf das Bild zugreifen kann.

Problem ist: wenn ich über <img src="passwortgeschuetzterordner/bild.jpg"> das Bild auf meiner Homepage darstellen will, wird vom Benutzer der Internetseite Benutzername und Passwort verlangt.

Ich möchte aber erreichen, dass der Benutzer die Bilder sehen kann, wenn er sie über meine Homepage anscheuen möchte, aber dass er sie nicht direkt über ihre URL aufrufen kann.

Ist es möglich, dass ich in meinem PHP-Skript meinen Passwortschutz umgehe?

Was ich mir denken könnte, wäre z.B. dass ich ähnlich wie beim connect() mit der Datenbank zu Beginn meines PHP-Skriptes dem PHP-Skript die Zugriffsdaten für den passwortgeschützten Ordner mitgebe.

Gibt es eine derartige Funktion?
Habt ihr sonstige Ideen, wie man das lösen könnte?

Vielen Dank vorab für Eure Antworten,
Thomas

  1. Huhu Thomas,

    Ich möchte aber erreichen, dass der Benutzer die Bilder sehen kann, wenn er sie über meine Homepage anscheuen möchte, aber dass er sie nicht direkt über ihre URL aufrufen kann.

    Ein Suchstichwort zu diesem Thema wäre "bandwidth theft" oder "hotlinking" von Bildern.
    Dazu findest Du einige Lösungsansätze und auch Erläuterungen warum diese nicht wirklich 100% funktionieren.

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
  2. hi,

    Ich möchte aber erreichen, dass der Benutzer die Bilder sehen kann, wenn er sie über meine Homepage anscheuen möchte, aber dass er sie nicht direkt über ihre URL aufrufen kann.

    Ist es möglich, dass ich in meinem PHP-Skript meinen Passwortschutz umgehe?

    Natürlich - du brauchst ihn sogar nicht mal "umgehen", wenn du analog zu include/require vorgehst: Auf Dateisystemebene ist dieser Passwortschutz ja gar nicht implementiert bzw. dort greift er gar nicht - das tut er nur bei Zugriff über HTTP.

    Was ich mir denken könnte, wäre z.B. dass ich ähnlich wie beim connect() mit der Datenbank zu Beginn meines PHP-Skriptes dem PHP-Skript die Zugriffsdaten für den passwortgeschützten Ordner mitgebe.

    Gibt es eine derartige Funktion?

    Nein.

    Habt ihr sonstige Ideen, wie man das lösen könnte?

    Erstelle dir ein PHP-Script, welches den passenden Content-Type-Header für Bilder (z.B. image/jpeg) mittels der Funktion header() erzeugt, und anschließend die binären Bilddaten aus dem Dateisystem einliest und an den Client weitergibt - z.B. per readfile().

    Statt den Bildern verlinkst du dann dieses Script als src-Adresse der Bilder in deinem HTML.
    Du kannst das Script gerne auch Parametergesteuert aufrufen, so dass du ihm bspw. den Bildpfad/-namen als GET-Parameter übergibst - so dass sich ein solches Script für alle Bilder nutzen lässt. (Passender Content-Type wäre dann auch noch zu ermitteln, z.B. an Hand der Dateiendung.)
    Dabei solltest du den Parameterwert aber natürlich entsprechend validieren - nicht, dass sich über dieses Script auch die Inhalte anderer Dateien (ggf. nicht mal Bilder, sondern Scriptdateien mit darin liegenden Passwörtern etc.) auslesen lassen.

    Dass das natürlich etwas mehr Performance kostet als direktes Ausliefern der Bilder durch den Webserver, sollte aber klar sein.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi.

      Erstelle dir ein PHP-Script, welches den passenden Content-Type-Header für Bilder (z.B. image/jpeg) mittels der Funktion header() erzeugt, und anschließend die binären Bilddaten aus dem Dateisystem einliest und an den Client weitergibt - z.B. per readfile().

      Statt den Bildern verlinkst du dann dieses Script als src-Adresse der Bilder in deinem HTML.
      Du kannst das Script gerne auch Parametergesteuert aufrufen, so dass du ihm bspw. den Bildpfad/-namen als GET-Parameter übergibst - so dass sich ein solches Script für alle Bilder nutzen lässt.

      Super, das hört sich ja schonmal gut an.
      Das geht auf jeden Fall schon mal in die richtuge Richtung...

      Das heißt also, ich muss eine Datei wie diese erstellen:

      // File "bildlinker.php"
      header('Content-Type: image/jpeg');
      $Dateipfad="bildquelle/bild.jpg";
      readfile($Dateipfad);

      Aber wie inkludiere ich das ganze dann in meinem PHP-Skript?

      Etwa so?

      // PHP-Skript

      print "<img src=require("bildlinker.php")>";

      Viele Grüße,
      Thomas

      1. hi,

        Aber wie inkludiere ich das ganze dann in meinem PHP-Skript?

        Gar nicht.

        Etwa so?

        // PHP-Skript

        print "<img src=require("bildlinker.php")>";

        Du willst eine Bildressource im HTML-Element img einbinden.
        Dass machst du wie sonst auch - du weist dem src-Attribut die Adresse der Ressource (dein Script) zu.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }