Sven Rautenberg: Bilder, Header, Caching?

Beitrag lesen

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