Stefan Bach: Direkte Verweise auf Bilder unterbinden?

Beitrag lesen

Hallo,

sobald ein Bild direkt über einen <img> aufgerufen wird oder einfach nur direkt verlinkt wird, dies zu einem fehler führt bzw. auf die hauptseite weitergeleitet wird. auf dem server sollen die bilder allerdings weiter  verfügbar sein und in der detailseite zu jedem bild angezeigt werden.

Du könntest folgendes probieren:
Die richtigen Bilder legst du in ein Verzeichnis auf dem Server, welches nicht über HTTP zugänglich ist. Für den Aufruf der Bilder erstellst du dir ein CGI Script. Dieses kann über mod_rewrite oder ähnliches aufgerufen werden (/images/bild.gif wird zu /cgi-bin/image.cgi?image=bild.gif).
Um den Aufruf aus anderen Seiten zu verhindern gibt dein Script jetzt aber nicht direkt das Bild aus. Es generiert stattdessen die HTML Seite, welche deine Detailansicht enthält und bindet das eigentliche Bild über einen Image Tag ein.
Bei dem ersten Aufruf generiert dein Script eine Unique ID Nummer, diese wird zusammen mit ihrem Erstellungszeitpunkt gespeichert. Bei dem Einbinden des Bildes wird sie im Query String mit angehängt. Der Aufruf deines Scriptes sieht dann in etwa so aus: /cgi-bin/image.cgi?image=bild.gif&id=123456
Wenn dein Script beim Aufruf eine solche ID mitbekommen hat, so überprüft es, ob der Erstellungszeitraum dieser ID nicht länger als z.B. eine Minute zurück liegt. Falls ja, dann liest es das Bild ein und gibt es an den Client weiter. Anderenfalls kann ja ein Standardbild angezeigt werden.

Wenn jetzt jemand direkt /images/bild.gif bei sich einbinden will, so wird dies nicht funktionieren. Bei dem ersten Request schickt dein Script ja nur eine HTML Seite raus, diese wird von einem Browser selbstverständlich nicht als Bild dargestellt. Falls jemand aber /images/bild.gif verlinkt, so funktioniert es problemlos.

Dies verhindert zwar nur das einbinden deiner Bilder, über die URL direkt können sie immer noch erreicht werden. Um das ganze noch sicherer zu machen könntest du mit Sessions arbeiten. Bei einem Aufruf deiner Homepage wird eine Session gestartet, und Bilder werden nur dann angezeigt, wenn die Session vorhanden ist. Die Session ID musst du über Cookies oder einen zusätzlichen Parameter im Query String mitnehmen.

Viele Grüße,

Stefan

--
Lass dir das Tanzen NICHT verbieten
http://tanzverbot.de