Gut, das Thema des aktuellen Webmasterfridays ist zwar mit „Was tun bei Urheberrechtsverstößen?“ deutlich weiter gefaßt, als das es dabei nur um Bilder und Fotos ginge.
Der „Aufhänger“ war aber wohl der Bilderklau beim TagSeoBlog und so will ich mich hier auch nur auf dieses Problem beziehen.
Von Bilderdieben und Raubkopierern
Im richtigen Leben ist das alles klar und weitestgehend eindeutig definiert. Geht jemand in eine Gemäldegalerie, hängt dort heimlich ein Bild ab und nimmt es mit nach Hause, so ist das Diebstahl und derjenige ein Bilderdieb. Tut er so etwas zudem unter Anwendung von Gewalt oder Androhung von Gefahr für Leib oder Leben von Personen, so ist das Raub. Was nun genau ein Raubkopierer macht, ist mir allerdings nicht klar. Ich könnte mir aber vorstellen, daß das jemand ist, der z.B. eine bestimmte Ablauf eines bekannt gewordenen Raubes nachahmt, mithin also den Raub in der Vorgehensweise kopiert :-)
Beiden Delikten, Diebstahl und Raub, ist gemeinsam, daß es sich um die Wegnahme einer fremden beweglichen Sache handelt. Deshalb wird ein Diebstahl meist auch recht schnell bemerkt, denn der entwendete Gegenstand, z.B. das Gemälde, ist ja nicht mehr da.
Bildkopien und Hotlinking
In der digitalen Welt sieht das nun etwas anders aus, auch wenn hier unzutreffenderweise die Begriffe aus dem richtigen Leben verwendet werden. Denn normalerweise wird ein Bild ja nicht „entwendet“, so daß es plötzlich beim Besitzer fehlt, sondern nur eine Kopie angefertigt und an anderer Stelle verwendet (Bildkopie). Das führt auch dazu, daß die unrechtmäßige Verwendung eines Bildes erst sehr spät oder oft auch gar nicht bemerkt wird. Meist kommt so etwas nur eher zufällig ans Tageslicht.
Besonders im Internet wird oft noch nicht mal eine Kopie eines Bildes angefertigt, sondern das Bild einfach direkt von der fremden Seite eingebunden (Hotlink). Dadurch wird nicht nur das Bild möglicherweise unberechtigt verwendet, sondern auch noch der Server des „Bestohlenen“ belastet und ein zusätzliches Datenaufkommen erzeugt. Andererseits sind diese Hotlinks recht schnell zu erkennen, wenn man sich als Webmaster ab und zu die Serverlogfiles daraufhin ansieht.
Urheberrecht
Die oben genannten Bildkopien bzw. das Hotlinking sind also kein Diebstahl oder gar Raub, sondern Verletzungen des Urheberrechtes.
Die wichtigsten Punkte im Urheberecht sind wohl Veröffentlichungs-, Verwertungs- und Folgerechte die es dem Schöpfer eines Werkes erlauben, allein darüber zu bestimmt, ob, wann, wo und in welcher Form sein Werk der Öffentlichkeit zugänglich gemacht und wie es im weiteren verwertet, verbreitet und vervielfältigt wird.
Meine Bilder
Im Allgemeinen habe ich nichts dagegen, wenn meine hier oder bei Putzlowitsch veröffentlichten Bilder von Dritten verwendet werden. Sei es nun in Communities, Foren oder anderen Blogs. Auch mit Hotlinks habe ich im Zeitalter von „unbegrenztem“ Traffic keine Probleme, ganz im Gegenteil, bin ich doch darüber schon auf die eine oder andere interessante Seite gestoßen.
Wenn nun aber meine Bilder dreist auf irgendwelchen Spam-Seiten landen oder in einem mir sonst wie nicht genehmen Kontext (z.B. rechtsradikale Foren) erscheinen, dann habe ich schon etwas dagegen. Da es bisher meist nur Hotlinks waren (bei Kopien habe ich es möglicherweise nur noch nicht bemerkt), gehe ich dagegen mit einer technischen Maßnahme vor.
Bilder-Hotlink unterbinden
Normalerweise sendet der Webbrowser eines Nutzers beim Aufruf einer Seite oder eines Bildes die Information mit, woher der Aufruf kommt. Bei einem Link ist das die verlinkende Seite oder bei einem sichtbaren Bild eben die Seite, auf der das Bild angezeigt wird. Diese Information, den so genannten REFERER kann der Webserver auswerten und gegebenenfalls bestimmte Aktionen ausführen. Das Ganze läuft über das Servermodul mod_rewrite und wird über die Datei .htaccess konfiguriert. Damit kann man dem Webserver z.B. sagen, daß wenn die Seite xyz aufgerufen wurde, er doch stattdessen bitte die Seite abc ausliefern oder einen Fehlercode zurückgeben soll.
Die einfachste und zugleich radikalste Variante, dem Hotlinking zu begegnen, ist folgender Dreizeiler:
RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?schnurpsel.de/.*$ [NC] RewriteRule \.(gif|jpe?g|png)$ - [F,L]
So oder ähnlich findet man das auf vielen Webseiten als Empfehlung, wie man sich gegen das Hotlinking schützen kann. Die Strategie ist hierbei, allen die Zugriffe auf Bilder zu verbieten (3. Zeile), und nur Zugriffe von der eigenen Seite zuzulassen (2. Zeile). Die 1. Zeile nimmt etwas Radikalität wieder raus, denn auch wenn der Referer leer, also nicht bekannt ist, woher der Aufruf kam, werden die Bilder angezeigt. Ohne Zeile eins würde man z.B. alle Suchmaschinen-Bots aussperren und auch die User, deren Browser den Referer unterdrückt.
Unberechtigte Zugriffe werden hier vom Webserver mit dem Fehlercode „403 Forbidden“ quittiert, der Browser zeigt dann für ein Bild nur den Alternativtext (falls vorhanden) und eventuell ein Fehlersymbol an. Die Antwort ist klar und deutlich, der Zugriff ist verboten und wird verweigert.
Meine Hotlink-Strategie
Ich bin da nicht ganz so konsequent sondern fahre eine andere Strategie. Ich erlaube prinzipiell allen den Zugriff und schließe nur unerwünschte Seiten aus. Ich will ja nicht die vielen netten User von Jappy, Schnappy und Zappy daran hindern, sich gegenseitig ihre „Gästebücher“ mit Bildern vollzukippen :-)
Bei mir sieht die Hotlinkabwehr deswegen etwas komplizierter aus:
RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_URI} !^/images/1x5120.gif$ RewriteRule \.(jpg|gif|png)$ - [NC,C] RewriteCond %{HTTP_REFERER} hotlink\.schnurpsel\.de [NC,OR] RewriteCond %{HTTP_REFERER} bilderdieb\.schnurpsel\.de [NC,OR] RewriteCond %{HTTP_REFERER} xxxx-yyyy\.zz RewriteRule . /images/1x5120.gif [T=image/gif,L]
In der 1. Zeile wird geprüft, ob die angeforderte Datei überhaupt existiert. Falls nicht, soll nicht die Hotlink-Abwehr greifen, sondern die normale Fehlerbehandlung ablaufen.
Da ich nicht einfach den Statuscode 403 zurückliefern will, sondern ein Ersatzbild, wird in der 2. Zeile geprüft, ob nicht gerade das Ersatzbild angefordert wird. Dann darf die Hotlink-Abwehr nicht erneut anspringen, sonst gäbe es eine prima Endlosschleife.
Die 3. Zeile selektiert nur die Zugriffe, die ein Bild mit einer der angegebenen Datei-Erweiterungen betreffen, hier also jpg-, gif- und png-Bilder. Die Liste kann natürlich beliebig erweitert werden. Dabei kann man ein klein wenig optimieren, in dem man den Bildtyp nach der Reihenfolge ihrer Häufigkeit angibt. Da bei mir die meisten Bilder vom Typ jpg sind, brauchen die restlichen Einträge dann nicht mehr überprüft werden.
Mit den Zeilen 1 bis 3 werden Vorbedingungen geprüft und nur wenn die angeforderte Datei existiert, nicht das Ersatzbild ist und dem richtigen Dateityp entspricht, wird der Rest abgearbeitet.
Die Zeilen 4, 5 … n-1 enthalten die eigentlichen Bedingungen, wann ein Hotlink als böse einzuordnen ist. Hier wird auf den oben schon angesprochenen Referer Bezug genommen und jede Seite eingetragen, von der Hotlinks unerwünscht sind. Auch hier kann man etwas optimieren, indem man die häufigsten Seiten an den Anfang der Liste stellt. Man kann hier aber auch andere Bedingungen einsetzen, z.B. IP-Adressen. Eine ausführliche Beschreibung zum Apache-Rewrite-Modul findet man hier.
Die letzte Zeile n gibt dann nur noch das Ersatzbild aus, bei mir ein transparentes GIF-Bild mit einem Pixel Breite aber über 5000 Bildpunkten Höhe. Zu sehen ist es nicht, aber es reißt die Seite an der Stelle weit auseinander, ja nach dem, wie das Bild auf der Hotlinkseite eingebunden ist. Außerdem liefere ich, egal was für ein Bildtyp angefordert wird, immer das Gif-Bild aus. Deshalb wird noch der richtige Content-Type (image/gif) gesetzt.
So sieht es aus
Zur Demonstration habe ich mal zwei böse und eine gute Sub-Domain erstellt, damit man sehen kann, wie sich das Ersatzbild auswirkt.
Die gute Seite:
Der alte Hut
Die bösen Seiten:
Bilderdieb
Hotlink
Hinweis zu den bösen Seiten: Wenn man sich zuerst die gute Seite angesehen hat, dann wird auf einer der bösen Seiten möglicherweise trotzdem der Hut und nicht das Ersatzbild angezeigt. Das liegt am Caching durch den Browser. Man muß dann nochmal das Neuladen der Seite erzwingen, beim Firefox z.B. mit Shift+Reload-Button oder Strg+F5.
Vorerst reicht mir meine Hotlink-Abwehr per Ersatzbild für böse Seiten, die Seiten und Abrufe sind allerdings auch recht überschaubar. Problematisch wird es, wenn die Liste mit den Seiten gar zu lang wird, denn die muß der arme Webserver immer von oben bis unten abarbeiten. Das könnte sich dann mit schlechten Antwortzeiten und höherer Serverlast bemerkbar machen.
Nachtrag: Ich habe es nicht extra erwähnt, aber damit die Regeln überhaupt abgearbeitet werden, muß normalerweise die Rewrite-Engine eingeschaltet werden. Zudem sollte man prüfen, ob das Modul mod_rewrite überhaupt zur Verfügung steht. So sieht dann meine Variante komplett aus:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_URI} !/bilder/bild-foto/die-besten-bilder-der-welt.jpg$ RewriteRule \.(jpg|gif|png)$ - [NC,C] RewriteCond %{HTTP_REFERER} bilderr\.com [NC,OR] RewriteCond %{HTTP_REFERER} pictures-images\.com [NC,OR] RewriteCond %{HTTP_REFERER} freeimages-de\.bloggum\.com [NC,OR] RewriteCond %{HTTP_REFERER} zaggla\.com [NC] RewriteRule . /bilder/bild-foto/die-besten-bilder-der-welt.jpg [T=image/jpg,L] </IfModule>
Dieser Block sollte noch vor allen anderen Rewrite-Blöcken stehen, also auch vor den WordPress-Permalink-Eintrag.
Hi Ingo,
danke für die Anleitung. Vllt kannst Du mir einen Tipp geben. Wenn ich nun eine komplette domain inkl aller subdomains ausschließen möchte, wie schreib ich das? So:
RewriteCond %{HTTP_REFERER} !^http://(www.)?tld\.com [NC,OR]
??? Oder muss ich jede subdomain auflisten?
Gruß, Martin
Als für Variante 1, wo eigene Domains eingeschlossen werden, müßte das so aussehen:
Da darf dann in den Optionen aber kein OR stehen.
Die Bedingung lautet ja: ist „nicht leer“ UND ist „nicht domain1“ UND ist „nicht domain2“ usw.
aha. Danke Dir, werde das glеiсh mal einbauen. Wenn mein Blog tot ist, weißt Du wer schuld ist ;-)
hmm, funzt net. Falls es Dir nicht zu viel Mühe macht (ich mal Dir dann auch mal ein Bild)
Hier mein Script, was das Bild allerdings nicht austauscht:
Soll also ein Austausch sein… Hast Du ne Idee, warum das nicht klappt?
Habe mal das ganze in <pre>-Tags gesetzt, ist übersichtlicher.
Also willst Du meine Variante (2) verwenden und nur bestimmte Referer ausschließen.
Da muß man die Bedingungen im zweiten Teil quasi umdrehen, also das negierende Ausrufezeichen ! muß weg und dafür das OR wieder mit in die Optionen rein, bei der letzten Bedingung (RewriteCond) allerdings nicht:
Die Bedingung heißt hier ja ist „domain1“ ODER ist „domain2“ ODER ist „…“, dann das Ersatzbild ausliefern.
hm, danke, aber irgendwie klappt das noch immer nicht.
Auf dieser Seite: freeimages-de. bloggum .com/ post/das-lustige-tier-bilder.html wird immer noch mein Bild angezeigt, obwohl ich tld1 im Script durch bloggum ersetzt habe.
Oder mache ich einen Denkfehler?
Naja, also ich habe in meiner Variante oben das mit dem http und so weggelassen, das funktioniert einwandfrei:
Also ganz konkret sieht das bei mir so aus:
Und die .htaccess liegt auf deiner Subdomain „images.tagseoblog.de“? Ich frag ja nur mal so :-)
hmm, funzt nicht. habe jetzt exakt deine Zeilen eingefügt. htaccess liegt natürlich in der images-subdomain. merkwürdig…
vllt noch einen blick? das ist mein script 1zu1:
Gut, ich hab das jetzt nicht explizit angegeben, aber vor den ganzen Zeilen muß noch RewriteEngine On stehen und korrekterweise setzt man noch einen Rahmen drumrum, also insgesamt müßte das so aussehen:
Dieser Block sollte noch vor allen anderen Rewrite-Blöcken stehen, also z.B. auch vor den WordPress-Permalink-Eintrag.
Ingo, du bist super! Danke, jetzt klappt es. Wenn Du mal irgendwas haben möchtest (ein Bildchen für sonstewas), gib Zeichen ;-)
Btw: Übrigens ist mein SEO-Simpsons-Bild vom 27.11. schon in der Bildersuche -> 12 Tage. Hängt wohl tatsächlich vom Grad der verlinkung ab.
Bitte, gern geschehen.
Woran lag es denn nun, daß es erst nicht funktioniert hatte?
Was mich übrigens kürzlich verblüfft hatte ist, daß es für den Suchbegriff schnurpsel seit einiger Zeit Bilder in der Google Universal-Search gibt. Das ist wohl immer noch ein großes Geheimnis, wann und warum dort Bilder erscheinen.
es war natürlich die „RewriteEngine On“-Klammer *schäm*
Warum Google für Schnurpsel nun GUS-Ergebnisse einblendet, verstah ich auch nicht. Im Zweifelsfall manuell ;-)
[…] Script, dass den Bilderdieben den gar aus macht. Wie in diesem Artikel von Ingo beschrieben (”Bilderdiebe – was ich dagegen tue“), kann man missliebige Seiten einfach via htaccess auschließen. Ich bin allerdings so […]
[…] zweite Methode habe ich erst kürzlich bei Schnurpsel entdeckt, ist übrigens ein sehr lesenswerter Artikel. Schnurpsel hat stets ein paar gute Ideen […]
[…] to Ingo) Brötchen […]
[…] könnte so aussehen, wie es Schnurpsel in seinem Blog beschreibt: er definiert in seiner .htaccess-Datei eine Rewrite-Rule und liefert bei einer fest […]
Hallo,
sehr interessanter Artikel!
Da sich auf meinem Blog sehr viele Bilder befinden, werde ich die Serverlog-Files auf jeden Fall mal kontrollieren. Mal schauen ob ich die auch finde.
Es kann ja nicht schaden die Radikalmethode zu verwenden, oder?
Gruß, Reiner
Ich teste das glеiсh mal aus…. Ich finds immer wieder gut, dass man im Netz echte Experten findet… Sonst wäre ich echt aufgeschmissen.
[…] Un dergänzend ein toller Artikel auch von Schnurpsel. […]
[…] Bilderdiebe und was ich dagegen tue – die Hotlink-Sperre […]