Bilderklau unterbinden mit dem Apache Modul SetEnv

Wie man mit einfachen Mitteln verhindert, dass Bilder vom eigenen Webserver auf fremden Seiten eingebunden werden (Hijacking)

Worum geht es?

Webmaster, die die Logdateien ihrer Server aufmerksam lesen, bemerken bald, dass sie nicht Herr ihrer Dateien sind: Vor allem Grafiken werden gerne von anderen Seiten eingebunden. So existiert z.B. eine Szene vorwiegend weiblicher junger Leute, die beim kostenlosen Homepageprovider beepworld ganze Galerien von Pferdefotos erstellen, die sie als die eigenen ausgeben. Das wirkt zunächst unheimlich auf die eigentlichen Pferdebesitzer; danach ist es vor allem ärgerlich: So wird die Bandbreite des eigenen Servers gestohlen, und bei entsprechendem Aufkommen kann das tatsächlich recht schnell teuer werden.

Gegen den Diebstahl der Bilder durch Abspeichern kann man nicht viel machen; wohl aber gegen das reine Einbinden auf fremden Seiten: Die meisten Programme liefern nämlich beim Abruf einer Datei vom Server einen sogenannten "Referer" mit. In diesem Referer steht, von welcher anderen Seite die Datei aufgerufen wurde. Bei HTML-Seiten ist das die zuletzt besuchte Seite; bei Bildern die Seite, von der aus die Grafik eingebunden wurde.

Auf diese Weise lässt sich das "Hijacking" der Bilder leicht unterbinden: Auf dem Apache Server kann man für den Fall, dass der Referer nicht in Ordnung ist, die Ausgabe der Datei verweigern. (Alternativ kann man eine andere Grafik ausgeben, um die Diebe zu ärgern, aber dazu später.)

Was kann man dagegen machen? (Wenn man will)

Man muss in dem Verzeichnis, das die begehrten Grafiken enthält (notfalls geht auch das Stammverzeichnis), eine kleine Textdatei mit dem Namen ".htaccess" ablegen.
In dieser Datei steht Folgendes:

  1. Wenn der Referer unseren Domainnamen enthält, wird eine Variable "ok" gesetzt:
    SetEnvIfNoCase Referer "hypotext.de" ok=1
  2. Für alle Dateien mit der Endung *.gif oder *.jpg wird die Auslieferung erlaubt, wenn die Variable "ok" vorhanden ist:
    <FilesMatch ".(gif|jpg)">
    Order Allow,Deny
    Allow from env=ok
    </FilesMatch>

Ist das alles?

Nun ja, es gibt einige Besonderheiten zu beachten:

  1. Nicht jeder Client liefert einen Referer mit; man kann das sogar z.T. selbst unterbinden. Daher sollte man Aufrufe mit leeren Referern zulassen:
    SetEnvIf Referer "^$" ok=1
  2. Läuft die Seite unter mehreren Domainnamen? Diese Seiten sind zur zeit z.B. unter www.hypotext.de, www.g-mine.de und www.kerberos.de erreichbar:
    SetEnvIfNoCase Referer "g-mine.de" ok=1
    SetEnvIfNoCase Referer "kerberos.de" ok=1
  3. Wollen Sie Besucher über die Bildersuchmaschinen (Google, Yahoo, etc.) anziehen? Wenn ja:
    SetEnvIf Referer "google" ok=1
    SetEnvIf Referer "yahoo" ok=1
    SetEnvIf Referer "altavista" ok=1
    (...)

Was passiert nun?

Wenn Sie die Datei korrekt erstellt haben und Ihr Web-Server keine Probleme macht, gibt der Server einen Fehlercode 403 zurück; auf den fremden Seiten wird nun eine "zerbrochene" Grafik angezeigt. Das ist natürlich nicht sehr schön, spart aber Bandbreite. Wenn Sie etwas Bandbreite übrig haben, können Sie am Ende der .htaccess-Datei noch eine Datei angeben, die statt der angeforderten ausgegeben werden soll:
ErrorDocument 403 /403.jpg

Damit können Sie natürlich lustigen Schabernack treiben: Wer weiß, was diese Grafik nun anzeigt?
Aber bevor Sie sich den Zorn der fremden Diebe zuziehen, sollten Sie sich vielleicht auf ein Logo oder einen freundlichen Hinweis beschränken (mir ist nicht bekannt, ob diese Methode bereits für Bannerwerbung eingesetzt wurde).