ZeroM: Direkte Verweise auf Bilder unterbinden?

Hallo Leute,

ich betreibe eine Bildergalerie, und nun möchte ich, daß 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. kennt jemand eine lösung für diese problematik? .htaccess?

Vielen Dank

Gruß
Martin

  1. Hallo Martin,

    was genau ist Dein Ziel? Willst Du die Bilder auf Deiner Seite zwar anzeigen, aber nicht downloadbar machen?

    Grüße,
    bluntburn

    --
    jeden Tag 'ne Currywurst...
    1. der Download besteht ja über das Galerie-Script. aber sie sollen nicht direkt in anderen Seiten verlinkt werden können oder von einem Nutzer direkt aufgerufen werden können. Also nur vom Script aufgerufen werden können wenn ich das richtig sehe? ist etwas derartiges möglich?

      1. Also möchtest Du, dass andere Deine Bilder nicht in ihre Webseiten einbauen können . Oder willst Du, dass Deinen Bilder nur auf Deinen Seiten "funktionieren"? Bedeutet dies, dass der Download der Bilder nicht kostenlos sein soll?

        Das Problem ist, wenn Du Bilder irgendwie auf Deiner Website hast, dann sind sie eben auch im Web verfügbar...

        bluntburn

        --
        jeden Tag 'ne Currywurst...
        1. naja kostenlos sind die bilder schon. es geht auch nicht um das copyright da sie user-hochgeladen werden. aber es geht mir einfach darum daß sie nicht woanders eingebaut werden und damit traffic auf meine kosten verursachen.... also daß sie einfach nur in meinem script eingebunden werden können. geht sowas?

          ZeroM

          1. Hi ZeroM,

            naja kostenlos sind die bilder schon. es geht auch nicht um das copyright da sie user-hochgeladen werden. aber es geht mir einfach darum daß sie nicht woanders eingebaut werden und damit traffic auf meine kosten verursachen.... also daß sie einfach nur in meinem script eingebunden werden können. geht sowas?

            nein, das geht aus besagten Gründen nicht. Es gibt die ein oder andere Möglichkeit, die Bilder-URL zu verschleiern, so dass sie nicht "mal eben so" in anderen Seiten eingebunde werden können.

            Vielleicht hilft aber auch ein Wasserzeichen mit DEINER Domain, damit die anderen vor dem Einbau etwas abgeschreckt werden (wer liest schon gern eine andere Domain auf seinen Seiten...)

            So long,
            bluntburn

            --
            jeden Tag 'ne Currywurst...
            1. aber es geht mir einfach darum daß sie nicht woanders eingebaut werden und damit traffic auf meine kosten verursachen....
              nein, das geht aus besagten Gründen nicht.

              doch, es geht. wie schon gesagt, lege die bilder ausserhalb der webroot ab und frage beim laden den referer ab. wenn der falsch ist, gibts statt des echten bildes ein bild mit dem hinweis auf bilderklau und der adresse deiner seite zu sehen.
              so gehts bei den cd/dvd-cover-seiten z.b.
              wenn ein browser gar keinen referer sendet, hilft das allerdings noch nichts.

              aber du kannst dem bild-namen die session-id voranstellen, so das sich der name mit jeder session ändert.
              auslieferung der bilder halt über das script.
              damit würde jeder kopierte link ins leere laufen. auch da könntest du als ersatz das bild mit dem hinweis und deiner url ausliefern.
              dieses sollte möglichst s/w sein, damit es klein bleibt.

              mfg. raik

  2. 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
  3. Hallo ZeroM,

    es gibt keine Lösung für Dein Problem. Es gibt einige Ansätze im Archiv, einige tausend Diskussionen dazu. Die m.E. beste Lösung ist folgende. Die aufrufende Seite, also die, in der Du Dein Bild einbindest, erzeugt eine zufällige Zahl mit dem aktuellen Zeitstempel und speichert die irgendwo am Server. Das Bild selber, bzw. das Script, was letztlich das Bild ausgibt, überprüft, ob diese zufällige Zahl übergeben wurde und noch stimmt. Nach einer vorgegebenen Zeit verfällt diese Zahl und das Bild wird nicht mehr ausgeliefert. Ist ein Haufen Aufwand und verhindert nicht das Traffic Stehlen, sondern stellt nur sicher, dass das Bild nur z.B. 10 Minuten nachdem die ursprüngliche Seite aufgerufen wurde, angezeigt werden kann.

    Gruss, Thoralf

    --
    Sic Luceat Lux!
  4. Hallo,

    kennt jemand eine lösung für diese problematik? .htaccess?

    Die genannten Ansaetze mit (Session-)IDs, die man auf dem Server
    zwischenspeichert, sind sicher am effizientesten.

    Eine etwas weniger "zuverlaessige", dafuer auch viel weniger
    aufwendige Methode gibt es durchaus mit .htaccess - dabei
    wird der Referrer geprueft, und bei "falschem" Referrer
    wird mit mod_rewrite ein Ersatzbild angezeigt.

    Ich brauche es selbst - kurzes .htaccess-Beispiel:
    http://www.tiptom.ch/humor/geklaut/
    Meine Quelle war:
    http://www.scriptygoddess.com/archives/000988.php

    Auch mit PHP koennte man sowas natuerlich umsetzen.
    Prinzip: Die Bilder liegen in einem Verzeichnis, das via HTTP
    nicht erreichbar ist, und werden nur bei "richtigem" (oder
    fehlendem!) Referrer durch das PHP-Skript ausgeliefert
    (z.B. mit fpassthru() durchgeschleust).

    Der Referrer ist allerdings manipulierbar; manche Browser
    senden auf Wunsch des Benutzers gar keinen Referrer, und
    gewisse "Tools" (z.B. WebWasher) schreiben offenbar Unsinn
    in den Referrer, sodass Du womoeglich ein paar wenige
    "unschuldige" Leute aussperrst (natuerlich sind sie
    selbst schuld, wenn sie Software einsetzen, die den
    Referrer verfaelscht...). Solange man nur bei _falschem_
    Referrer das Ersatzbild liefert, aber bei _fehlendem_
    Referrer das normale Bild, finde ich es durchaus vertretbar.

    mfg

    Thomas

    Gruesse,

    Thomas