Zugriff auf Bilder nur über session?
Jense
- webserver
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
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
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
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
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/)
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
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
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®
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®