[PHP]Grafiken vor fremder Benutzung+Ansicht schützen

blueage

Lt. Commander
Registriert
März 2006
Beiträge
1.392
Hi zusammen,

das Problem ist - denke ich - bekannt.
Man lädt Fotos auf seinen Webspace hoch, und möchte dies nur bestimmten Usern zur Verfügung stellen.
Einfachste Lösung geht natürlich per htaccess.

Habe aber ein PHP-Programm geschrieben (mit Sessions), und möchte dass nur User
welche eingeloggt sind, auch die Fotos anschauen können.

D.h. wenn man auch den direkt-Link zu dem Foto kennt, darf/kann man dieses nur anschauen
wenn man eingeloggt ist.

Bei Foren (phpbb, smf, etc.) ist dies ja auch ohne htaccess gelöst.

Wer kann mir einen Tipp geben?

Danke und Grüße,
blueage
 
Um zu verhindern, dass ein Benutzer den Deeplink zu einem Bild (also z.B. http://domain.de/beispiel.jpg) aufruft, bedarf es einer entsprechenden Kontrolle des Web-Servers. Falls Du Zugriff auf diese Einstellungen hast, solltest Du mal in der Dokumentation des Web-Servers nachschlagen. Ich meine bei Apache mal sowas gesehen zu haben. Damit geht es auf jeden Fall.

Du würdest dann die Bilder nur über ein Skript zugänglich machen (z.B. http://domain.de/img.php?name=beispiel.jpg). Dann musst Du in dem PHP-Skript natürlich prüfen, ob eine authorisierte Session existiert und dann das Bild zur Verfügung stellen. Entweder zeigst Du es einfach auf einer HTML-Seite an oder Du modifizierst die HTTP-Header und schickst es als Bilddatei an den Benutzer.

EDIT: Falls Du die Server-Einstellungen nicht editieren kannst, könntest Du die Bilddateien auch einfach in einem mit .htaccess geschützten Verzeichnis ablegen, das von außen nicht zugänglich ist. Dein PHP-Skript läuft ja serverseitig und muss sich demnach nicht der .htaccess-Hürde stellen. So kannst Du erzwingen, dass die Bilder nur über das PHP-Skript abgerufen werden können.
 
Zuletzt bearbeitet: (Ergänzung)
danke für die schnelle Antwort!

Werde es testen, und wieder schreiben wenn es geklappt hat!:)
 
Du musst noch nicht mal die Konfigurationseinstellungen deines Webservers editieren. Du musst auch nicht umbedingt .htaccess-Features nutzen können. Du kannst deine Bilder auch einfach in ein Verzeichnis oberhalb des root-Verzeichnisses ablegen. Darauf kann man mit HTTP nicht zugreifen, mit PHP hingegen schon.
 
Das mit dem Zugriff hab ich so gelöst das ich in meiner $_SESSION['login'] einfach true = eingeloggt oder false= nicht eingeloggt gesetzt habe und dann ne entsprechende if-abfrage geschrieben:
PHP:
if ($_SESSION['login'])
{
   Bild
}
else
{
   echo 'Kein Zugriff !!';
}
 
@Lord Alien: Die Dateien dürfen aber nicht einfach in einem Unterverzeihniss des WebServers liegen, da sonst jemand die Datei direkt aufrufen könnte.
Sie muss dann durch .htaccess oder ein Verzeichnis höher liegen.

Grüße

tewes
 
tewes schrieb:
@Lord Alien: Die Dateien dürfen aber nicht einfach in einem Unterverzeihniss des WebServers liegen, da sonst jemand die Datei direkt aufrufen könnte.
Sie muss dann durch .htaccess oder ein Verzeichnis höher liegen.

Habe total vergessen das es sich um Bilder handelt :(:(
Meine Variante funktiniert natürlich nur mit .php dateien ....
 
Die Lösung wurde im Prinzip schon gepostet. Aber hier nochmal eine kleine zusammenfassung:

Seite: http://www.seite.de/

Dateien:
/picture.php
/pictures/
/pictures/.htaccess
/pictures/asd.jpg

Die pictures.php nimmt nun per GET den namen eines Bildes an, und sendet den Inhalt dieses Bildes per header() an den Browser zurück, sofern man eingeloggt ist. Es erfolgt kein direkter zugriff auf den Ordner /pictures/

Die /pictures/.htaccess schützt den Ordner von Zugriffen. Niemand darf Dateien darin anzeigen.
Außerdem aktiviert sie die Rewrite Engine und rewritet jede Anfrage auf ein .jpg nach /picture.php?name=asd.jpg.


Jetzt kann man ohne eingeloggt zu sein keine Bilder anzeigen (es wird die zugriff verweigert Seite gesendet). Wenn man aber eingeloggt ist kann man per http://www.seite.de/pictures/asd.jpg auf das Bild zugreifen.


Ich hoffe mein Beitrag war nicht allzu sinnlos. Der Threadersteller klang so, als würde er es auch selber hinkriegen, aber vielleicht stolpert ja nochmal irgendwer hier drüber ;)
 
jepp, die Lösung hätte mir auch selber einfallen können.

Aber vielen Dank nochmal an ALLE :) , waren echt super Antworten dabei,
und diese waren auch gut Beschrieben.

Ich war bisher so hohl, und hab eine PHP-Datei im "bilderordner" aufgerufen,
welche mir die Bilder ausgibt.
Dieser Ordner ist .htcaccess geschützt.

Daher ging's nicht...
 
Zurück
Oben