Verhinderung externer Bildlinks

Man findet Fotos seiner site in irgendwelchen sinnlosen Foren oder ärgert sich, daß die einfach auf anderen websites eingebunden werden.

Es gibt verschiedene Varianten, dieses zu verhindern. Bei trafficklau.de werden Varianten über die .htaccess mit mod-rewite oder mit einem Pearl-script vorgestellt.

Diese Varianten gehen allerdings davon aus, daß die zu schützenden Bilder alle in einem extra Ordner liegen.
Auf meiner website hab ich mehrere Hundert Bilder irgendwo verlinkt; der Aufwand wäre riesig, das alles umzuschreiben.

Außerdem betrifft es ja doch nur meist wenige Bilder, die lassen sich einfach aus den logfiles herausfinden.

Ein ehemaliger Regular aus d.c.i.w.a.m schickte mir ein PHP-script zum Verhindern dieses Bilderklaus. Ich hab es für mich überarbeitet und ein wenig gekürzt - ich hoffe, er hat nichts dagegen, es hier wiederzufinden.

Erlaubte Hosts festlegen

Die eigene(n) site(s), google, Bildersuchen, ...

Es empfielt sich sehr, die logfiles immer mal wieder nach diesen Bildern durchzusehen, um zu überprüfen, daß nicht ungewollt auf einer "freundlichen Seite" der Hinweis auf eine Urheberrechtsverletzung auftaucht.

allowedhosts.php

<?php $allowedhosts[] = "www.4haus.de"; $allowedhosts[] = "4haus.de"; $allowedhosts[] = "google.de"; $allowedhosts[] = "www.google.de"; $allowedhosts[] = "google.at"; $allowedhosts[] = "www.google.at"; $allowedhosts[] = "www.google.ch"; $allowedhosts[] = "google.ch"; $allowedhosts[] = "google.com"; $allowedhosts[] = "www.google.com"; $allowedhosts[] = "images.google.de"; $allowedhosts[] = "images.google.at"; $allowedhosts[] = "images.google.ch"; $allowedhosts[] = "images.google.com"; $allowedhosts[] = "216.239.35.120"; $allowedhosts[] = "66.249.93.104"; $allowedhosts[] = "72.14.221.104"; $allowedhosts[] = "translate.google.com"; $allowedhosts[] = "unimut3.fsk.uni-heidelberg.de"; ?>

Script zum Senden eines anderen Bildes

bildklau.php

<?php require("allowedhosts.php"); $bild = $_GET['bild']; if (substr($bild,0,1) == "/") { $bild=(substr($bild,1,strlen($bild))); } if(isset($_SERVER['HTTP_REFERER'])) { $url = parse_url($_SERVER['HTTP_REFERER']); $host = strtolower($url['host']); if(!in_array($host,$allowedhosts)) { $recipient = "iw@4haus.de"; $subject = "SENDPIC: Bilderklau"; $body = "Jemand hat versucht, einen Bildlink zu setzen:\n"; $body .= "Bild : '".$bild ."'\n"; if(isset($_SERVER['HTTP_REFERER'])) { $body .= "Referer : ".$_SERVER['HTTP_REFERER']."\n"; } mail($recipient,$subject,$body); $bild = "warning.gif"; } } $slashparts = explode("/", $bild); $parts = explode(".", $slashparts[sizeof($slashparts)-1]); if(!file_exists($bild)) { exit; } if($parts[sizeof($parts)-1] == "jpg" ) { $imgtype="jpeg"; } elseif($parts[sizeof($parts)-1] == "gif" ) { $imgtype="gif"; } else { exit; } header("Content-type: image/".$imgtype); header("Content-Disposition: inline; filename=".basename($bild)); readfile($bild); ?>

Den Teil mit dem Senden des E-Mails an sich selber kann man natürlich auch weglassen.

Betroffene Bilder in der .htaccess festlegen

Redirect permanent /bau/haus08.jpg http://www.4haus.de/bildklau.php?bild=bau/haus08.jpg
Redirect permanent /silvester/piratenbootg.jpg http://www.4haus.de/bildklau.php?bild=silvester/piratenbootg.jpg
Redirect permanent /dresden/garten04/treppe.jpg http://www.4haus.de/bildklau.php?bild=dresden/garten04/treppe.jpg

Der Bildname als Parameter muß relativ zum PHP-script übergeben werden. Das script liegt hier in der root, das ist am einfachsten.