Moin!
Hallo!
Dein Problem ist, dass dein Ansatz nicht funktioniert.
warum? Sessions haben doch einen Timeout! Also ändern sich die URLs ständig, was zu dem besagten caching-Problemen führt, die man IMHO nicht umgehen kann solange die URLs sich ändern.
Anhand der gegebenen Informationen ist das eigentlich relativ klar.
Wir haben:
1. Eine Bild-URL der folgenden Form:
show.php?dateiname=($bildbesitzer)/($thumb)&key=($key)&PHPSESSID=(1234354678)
2. Ein Skript:
<?
session_start();
if($key == md5(session_id() . $dateiname)):
header("Content-type: image/jpeg");
readfile/pfad/zu/den/bildern/$dateiname");
else:
echo "Du hast keine Berechtigung, dieses Foto anzusehen.";
endif;
?>
Das Skript entnimmt alle Informationen, die es zu verarbeiten hat, der URL. Also reicht es aus, eine gültige URL zu verwenden.
Die "Sicherheit" besteht darin, dass in $key der MD5-Hash aus Session-ID und Dateiname enthalten ist. Alle drei Informationen, Key, Dateiname und Session-ID, sind aber in der URL enthalten. Und um das Bild zu kriegen, müssen diese Informationen passen.
Dass hier eine Session verwendet wird, bringt leider nichts. session_start() bewirkt, dass PHP den Cookie oder die URL oder das Formular auf eine Session-ID hin durchsucht. Wenn kein anderer ID-Name gesetzt wurde, wird nach "PHPSESSID" gesucht. Wenn sowas gefunden wurde, wird die Session mit der angegebenen ID gestartet (d.h. session_id() gibt dann diese ID zurück, die in der URL steht).
Dass eine Session einen Timeout hat, ist hierbei irrelevant. Der Timeout bewirkt nur, dass die auf dem Server gespeicherten Session-Variablen irgendwann weg sind. Hier wird aber auf keinerlei Session-Variablen zugegriffen. Also bringt ein Timeout auch nichts.
Wenn keine weiteren Informationen ausgewertet werden, die _nicht_ dem Client übermittelt werden (also z.B. Authentifizierungsinformationen in Session-Variablen, oder HTTP-Auth), dann ist das System nicht sicher, sondern bringt nur Zusatzaufwand für die Auslieferung der Bilder.
Es bringt auch nichts, noch mehr Informationen an den MD5-Hash anzuhängen - wenn diese Informationen auch per URL übermittelt werden.
Wenn sowas funktionieren soll, dann darf die Information, welches Bild ausgeliefert werden soll, nicht zum Client geliefert werden, sondern muß als Session-Variable durchgereicht werden.
- Sven Rautenberg