Moin again,
Woher weiß show.php die Variable $secret? Ist die fest definiert? Dann hast du verloren!
Nur wenn sie pro Request bzw. pro Session neu definiert und als Session-Variable _nicht_ an den Browser übergeben wird, sondern auf dem Server verbleibt, bringt sie etwas.
Hmm... wenn $secret fest definiert ist, und ich per MD5 einen String verschlüssele, der aus $secret . $dateiname . $sessionid zusammengesetzt ist, dann hast Du doch keine Möglichkeit, das nachzuvollziehen, oder habe ich da einen Denkfehler? Die Variable Größe ist die SessionID, die könntest Du zur not nachvollziehen, $secret aber nicht. Auch wenn sie immer gleich ist. Du kennst Sie ja nicht und sie ist verschlüsselt zusammen mit der SessionID.
Und show.php prüft diese Variable. Ich wüßte nicht, wieso es da ein Problem geben sollte... Um den gleichen Key zu bekommen müßtest Du alled diese Variablen kennen: die ID, die für das Bild als Besitzer in der DB eingetragen ist, die geheime Variable, den Namen des Bildes und die SessionID, und wissen, dass die Verschlüsselung so erfolgt...
show.php kriegt alle Informationen, die es prüft, per URL vom Client. Und da du die URLs natürlich dynamisch generierst und nur gültige URLs erzeugst, erlaubt allein die URL Zugriff - wenn in der URL ein Bestandteil versteckt wird, der einem beliebigen Client nicht bekannt ist, so wie z.B. ein dynamischer Anteil $secret, der sich pro Request oder zumindest pro Session verändert, und auch nicht von der Session-ID abhängt (die kann man zur Not aus dem Cookie auslesen und in die URL packen), sondern zufällig generiert wird und als Session-Variable den Server niemals verläßt - erst dann funkioniert dein Schutz.
Der verändert sich doch pro Bild und Session, da mein Hash aus $secret, $dateiname und $sessionid zusammengesetzt wird.
Es geht hierbei nicht darum, wie du deinen MD5-Hash zusammensetzt, sondern wie du ihn auf Gültigkeit prüfst.
Ich kann Dir gerade nicht folgen... Wenn Du nicht weißt, wie ich ihn zusammensetze kannst Du ihn doch auch nicht faken? Anderer Browser, andere Session, anderes Bild = anderer Hash = kein Zugriff, weil Du eben $secret nicht weißt. Kannste mir das nochmal verdeutlichen? Ich check es nicht.
Du könntest auch ein Array als Session-Variable erstellen, in das du alle auszuliefernden Bilder einträgst, sobald der User sie abfordert. Wird das erste Bild in eine Seite eingebaut, wird z.B. $_SESSION['bilder'][0]='bildpfad/datei.gif' gesetzt. Und der Link zum show.php enthält nur die ID: "show.php?id=0". show.php weiß aufgrund der Session-ID jetzt, welches Bild zu laden ist. Und da die Session irgendwann einen Timeout hat, geht die Information, welches Bild hinter ID 0 steckt, irgendwann verloren. Man kann also nicht von extern aufs Bild linken.
Nice idea.
Wenn du aber ohnehin einen Login-Mechanismus eingebaut hast, der das direkte, unangemeldete Verlinken von Bildern unmöglich macht - warum dann noch das Gehampel mit dem MD5-Hash etc.
One step beyond ;)
Und im Zweifel kann man an die Bilder auch rankommen, indem der eine dem anderen das Bild mailt.
Das ist mir klar. Ich versuche halt die bestmögliche Lösung zu finden, aber irgendwie bin ich noch nicht zufrieden.
grüße,
toby
"Trying is the first step toward failure." - H. Simpson