gülcki: Wie binde ich nicht öffentliche Fotos in ein PHP Skript ein?

Hi!

Ich habe ein kleines (oder großes) Problem. Ich habe auf meiner Seite einen geschützten Bereich mit PHP und Sessions realisiert. In diesen geschützten Bereich sollen jetzt auch Fotos kommen, aber ich bin mir noch nicht ím Klaren darüber wie.

Die Fotos können nicht einfach in ein Verzeichnis, das unterhalb des Documentroots liegt, denn dann könnte ja jeder durch Eingabe der URL auf die Fotos zugreifen.

Als Lösung habe ich mir folgende Möglichkeiten überlegt:

1. Fotos in MySQL Datenbank speichern, halte ich aber für keine elegante Idee

2. Fotos in einem Verzeichnis überhalb des Documentroots ablegen, aber wie greife ich dann über PHP auf diese Fotos zu, und zeige sie auf der Seite

3. Fotos in ein per .htaccess geschütztes Verzeichnis, aber ich bin mir nicht sicher, ob das PHP Skript in dieses Verzeichnis reinkommt. Ich möchte nicht, dass die User nochmal einen Benutzername und Passwort eingeben müssen

Hoffe ihr könnt mir bei meinem Problem helfen.

Vielen Dank
gülcki

  1. Hallo,

    1. Fotos in MySQL Datenbank speichern, halte ich aber für keine elegante Idee

    Geht auch nicht richtig!

    1. Fotos in einem Verzeichnis überhalb des Documentroots ablegen, aber wie greife ich dann über PHP auf diese Fotos zu, und zeige sie auf der Seite

    Geht..
    Ganz einfach relative Pfade benutzen.
    Wie genau steht bei Deinem provider in den FAQ`S

    1. Fotos in ein per .htaccess geschütztes Verzeichnis, aber ich bin mir nicht sicher, ob das PHP Skript in dieses Verzeichnis reinkommt. Ich möchte nicht, dass die User nochmal einen Benutzername und Passwort eingeben müssen

    Gibs einige Dokus zu htacces und PHP!
    Vorsicht bei manchen Providern (z.Bsp. 1und1) gibs da Probleme mit)
    Tom

    1. Hi!

      1. Fotos in einem Verzeichnis überhalb des Documentroots ablegen, aber wie greife ich dann über PHP auf diese Fotos zu, und zeige sie auf der Seite
        Geht..
        Ganz einfach relative Pfade benutzen.
        Wie genau steht bei Deinem provider in den FAQ`S

      Mir ist schon klar, dass PHP auch Rechte überhalb des Documentroots hat, aber wie stelle ich ein Bild, dass in solch einem Verzeichnis liegt, mit PHP und dem Browser des Users dar?

      Vielen Dank
      gülcki

      1. Hallo gülcki,

        Mir ist schon klar, dass PHP auch Rechte überhalb des Documentroots hat, aber wie stelle ich ein Bild, dass in solch einem Verzeichnis liegt, mit PHP und dem Browser des Users dar?

        du öffnest das bild mit fopen(), sendest einen content-type (z.B. header( "Content-type: image/jpeg) und schickst dann das bild mit fpassthru() hinterher :-) schau dir dazu auch mal die User  Contributed Notes auf http://www.php.net/manual/de/function.fpassthru.php an. Da von php kein http-request ausgeführt wird, kann php auch bilder aus Verzeichnissen die mit .htaccess geschützt sind auslesen.

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hallo Tobias

          Verzeichnissen die mit .htaccess geschützt sind auslesen.
          Vorsicht mit solchen Tips:
          Ein Kunde von mir hat 1und1!
          Und da gilt:
          PHP läuft bei 1&1 Webhosting als CGI. Damit funktioniert eine Authentifizierung per Skript nicht
          (siehe: http://php3.de/manual/de/features.http-auth.php

          Grüße aus Berlin
          TomIRL

          1. Hallo Tom,

            Ein Kunde von mir hat 1und1!

            selber schuld :-)

            PHP läuft bei 1&1 Webhosting als CGI. Damit funktioniert eine Authentifizierung per Skript nicht

            mhh... es geht nicht darum einen ".htaccess"-Schutz mit php zu machen, sondern mit php Dateien aus .htaccess-geschützten Verzeichnissen auszulesen, oder? und da ist es doch egal, ob php als cgi oder als modul läuft. Oder habe ich da was falsch verstanden?

            Grüße aus Nürnberg
            Tobias [verwirrt]

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  2. Moin!

    Die Fotos können nicht einfach in ein Verzeichnis, das unterhalb des Documentroots liegt, denn dann könnte ja jeder durch Eingabe der URL auf die Fotos zugreifen.

    Vor was genau hast du Angst? Bzw. vor was genau willst du dich bzw. die Bilder schützen?

    Zugegeben: Wenn du den Zugriff, der über eine korrekte URL erfolgt, verhindert willst, wirst du diesen Zugriff auf ein korrektes Passwort prüfen müssen. Sowas geht bei einem Session-Selbstbau nur mit einem weiteren PHP-Skript, welches (wie von Thomas vorgeschlagen) das Bild dann direkt an den Server sendet und vorher die Authentifizierung prüft.

    Allerdings schützt das nur die Bilder, die sich auf dem Server befinden. Es ist ein leichtes für den authentifizierten Besucher, die Bilder zu speichern und dann weiterzugeben. Genauso wie eigentlich auch nur durch authentifizierte Besucher die korrekten URLs weitergegeben werden könnten, über die der oben skizzierte unauthentifizierte Zugriff erfolgen könnte. Das Bilderverzeichnis selbst kann man "undurchsuchbar" machen ("Options -Indexes" in der .htaccess), dadurch kann es keine Zufallsfunde geben.

    1. Fotos in ein per .htaccess geschütztes Verzeichnis, aber ich bin mir nicht sicher, ob das PHP Skript in dieses Verzeichnis reinkommt. Ich möchte nicht, dass die User nochmal einen Benutzername und Passwort eingeben müssen

    .htaccess-Authentifizierung hätte aber durchaus Vorteile, weil sie eben für einen gesamten Verzeichnisbaum-Abschnitt gilt, ohne dass man nochmal extra in Skripten die Authentifizierung prüfen muß. Sowas ist die zu bevorzugende Methode, und sie kann sogar von PHP angestoßen werden, wenn PHP als Server-Modul und ohne safe-mode-restrictions läuft.

    - Sven Rautenberg

    --
    Signatur oder nicht Signatur - das ist hier die Frage!
    1. Hallo Sven,

      welches (wie von Thomas vorgeschlagen)

      meinst du von mir vorgeschlagen? - wenn ja, schau nochmal genau hin - ist das jetzt das dritte Mal :-)

      Grüße aus Nürnberg
      Tobias

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|