Jense: Zugriff auf Bilder nur über session?

Hallo!

Ich brauch ein paar wegweisende Tips wie ich Bilder schützen kann. Es geht darum, dass nur angemeldete Nutzer an jeweils Benutzerspezifische Bilder kommen dürfen. Es soll also nicht möglich sein beispielsweise durch direkte Eingabe einer URL Zugriff auf ein Bild zu bekommen und jeder Nutzer hat nur Zugriff auf bestimmte Bilder (wer was darf und was nicht ist in DB gespeichert). Anders formuliert brauche ich eine Konstellation, mit der der Zugriff auf die Bilder ausschlieslich über PHP möglich ist (dann wird abgefragt wer welche Rechte hat und entsprechend das Bild ausgegeben oder eben nicht). Da gibt es doch bestimmt irgendeine elegante Methode! Bedanke mich schon vorab für den Input/ die Inspiration.

Jense

  1. Hallo Jense,

    Ich brauch ein paar wegweisende Tips wie ich Bilder schützen kann. […]

    Zeige mittels einer htaccess-Datei und den entsprechenden mod_rewrite-Rules auf eine PHP-Datei, wenn auf *.jpg-Dateien zugegriffen werden soll. In dieser PHP-Datei überprüfst du, ob derjenige, der auf das Bild zugreifen möchte, die entsprechenden Rechte hat. Wenn ja, gibst du das Bild mit Dateizugriffsbefehlen oder der GD-Lib von PHP aus. Weitere Infos findest du im PHP-Handbuch oder über Google :-)

    Schöne Grüße,
    Willi

    1. Hi Willi,

      Danke mal schauen ob ich damit was anfangen kann. Mit Google ist das immer so ne Sache wenn man nicht die passenden Schlagworte hat...

      Gruss Jense

      1. Hallo,

        Danke mal schauen ob ich damit was anfangen kann. Mit Google ist das immer so ne Sache wenn man nicht die passenden Schlagworte hat...

        Klaro, deswegen versuche ich dir diese ja zu liefern :-)

        Noch eine kleine Ergänzung meinerseits:
        fastix®s Vorschlag baut ja auf dem selben Ansatz wie meinem auf. Zusätzlich würde ich eben noch mod_rewrite nehmen, damit es .jpg- und nicht ".php?id="-URLs gibt.
        Das müsste dann so aussehen:

          
        RewriteEngine On  
        RewriteRule ^([a-zA-Z0-9_-]*)\.jpg$ getGrafik.php?id=$1  
        
        

        Außerdem solltest du vielleicht noch die getGrafik.php um folgende Zeilen ergänzen.

        if(!file_exists($bild)) {  
          header("HTTP/1.0 404 Not Found");  
          header("Status: 404 Not Found");  
          die('Diese Grafik existiert nicht.');  
        }  
        
        

        Schöne Grüße,
        Willi

        1. Moin!

          Außerdem solltest du vielleicht noch die getGrafik.php um folgende Zeilen ergänzen.

          if(!file_exists($bild)) {

          header("HTTP/1.0 404 Not Found");
            header("Status: 404 Not Found");
            die('Diese Grafik existiert nicht.');
          } elseif(!file_readable($bild)) {

          header("HTTP/1.0 403 Forbidden");
              header("Status: Forbidden");
              die('Zugriff verboten.');
          }

            
          MFFG (Mit freundlich- friedfertigem Grinsen)  
            
          fastix®  
          
          -- 
          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: [Schulungen](http://seminar-training-schulung.de/), [Seminare](http://seminar-training-schulung.de/), [Training](http://seminar-training-schulung.de/), [Development](http://webdesign.fastix.de/)
          
    2. Hi,

      Zeige mittels einer htaccess-Datei und den entsprechenden mod_rewrite-Rules auf eine PHP-Datei, wenn auf *.jpg-Dateien zugegriffen werden soll.

      Action + AddHandler tun's auch.

      In dieser PHP-Datei überprüfst du, ob derjenige, der auf das Bild zugreifen möchte, die entsprechenden Rechte hat. Wenn ja, gibst du das Bild mit Dateizugriffsbefehlen oder der GD-Lib von PHP aus.

      readfile reicht eigentlich aus (bei sehr grossen Dateien kann's Probleme geben, Archivsuche hilft weiter) - die GD-Funktionen zu bemuehen, ist ueberfluessig.

      MfG ChrisB

      1. Hi ChrisB

        Action + AddHandler tun's auch.

        Okay, stimmt. Hast Recht.

        In dieser PHP-Datei überprüfst du, ob derjenige, der auf das Bild zugreifen möchte, die entsprechenden Rechte hat. Wenn ja, gibst du das Bild mit Dateizugriffsbefehlen oder der GD-Lib von PHP aus.

        readfile reicht eigentlich aus (bei sehr grossen Dateien kann's Probleme geben, Archivsuche hilft weiter) - die GD-Funktionen zu bemuehen, ist ueberfluessig.

        Ja, sag ich ja. "Dateizugriffsbefehle (oder GD-Lib)" - readfile ist ja auch so ein Dateizugriffsbefehl ;-)

        Schöne Grüße,
        Willi

  2. Moin!

    Im HTML:
    <img src='getGrafik.php?bild=75'>

    getGrafik.php:

    <?php  
    if ((isset($_GET['bild'])) && ($_GET['bild']*1) > 0) {  
       $bild=$_GET['bild'].'jpg';  
    } else {  
       die('Netter Versuch...')  
    }  
      
    session_start();  
    if ((isset('$_SESSION')) && (isset($_SESSION['logged_in'])) && $_SESSION['logged_in'] ) {  
      
       header('Content-Type: image/jpeg'); # oder header('Content-Type: '.mime-content-type($bild))  
       passthrue($bild);  
    }  
    ?>
    

    (ungetestet, Bitte selbst Fehlerchen rausmachen)

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    1. Moin!

      Die Grafiken könne sich in diesem Beispiel in einem mit htaccess gesperrten Ordner befinden, da diese nicht der Webserver rausgibt, sondern das Skript diese 'liest'.

      htaccess:

      order allow deny  
      deny from all
      

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development