Folgende Seite hat mich inspiriert:
http://www.guweb.com/postcards/help/antileech.shtml
So wie es dort steht, funktioniert es aber nicht
folgendes File tut bei mir nun Dienst:
<?php
// Eigene Domain (ohne "www." oder dergleichen)
$selfdomain = ".domain.de";
// Verzeichnis der Bilder (kein Slash am Ende!)
$imgdir = "c:/www/www.domain.de/richtig";
$errdir = "C:/www/www.domain.de/falsch";
$errfile = "C:/www/www.domain.de/illegal.gif";
// Zustzlich erlaubte Domain
$allowdomain = "afterbuy.de";
$selfdomain = strtoupper($selfdomain);
$allowdomain = strtoupper($allowdomain);
$ebayjoker = strtoupper("cgi5.ebay.de/ws2/eBayISAPI.dll");
$ebay = strtoupper("eBayISAPI.dll");
$item1 = strtoupper("123456789");
$item2 = strtoupper("123456789");
$item3 = strtoupper("123456789");
$item4 = strtoupper("123456789");
$item5 = strtoupper("123456789");
$item6 = strtoupper("123456789");
$item7 = strtoupper("123456789");
$item8 = strtoupper("123456789");
$item9 = strtoupper("123456789");
$item10 = strtoupper("123456789");
$item11 = strtoupper("123456789");
$ref = strtoupper($HTTP_REFERER);
// protokoll entfernen
$ref = str_replace("HTTP://", "", $ref);
$ref = str_replace("x.php", "", $ref);
// domain extrahieren
if (strpos($ref, "/")) $ref = substr($ref, 0, strpos($ref, "/"));
if (($ref=="") || (strpos($ref, $allowdomain)) || (strpos($ref, $selfdomain)) ||
(strpos($ref, $ebayjoker)) ||
(
((strpos($ref, $ebay)) && (strpos($ref, $item1))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item2))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item3))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item4))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item5))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item6))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item7))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item8))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item9))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item10))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item11)))
))
{
$fn = $PATH_INFO;
if ((strpos($fn, "../")) || (strpos($fn, "..\\")))
{ echo "Zugriffsverletzung"; // Server schützen
}
else
{
if (file_exists ($imgdir.$fn))
{ @readfile($imgdir.$fn); }// Datei ausgeben
else
{ @readfile($errfile); } // Datei fehlt, Ersatzdatei senden
}
}
else
{
$fn = $PATH_INFO;
if ((strpos($fn, "../")) || (strpos($fn, "..\\")))
{echo "Zugriffsverletzung"; // Server schützen
}
else
{
if (file_exists ($errdir.$fn))
{@readfile($errdir.$fn); }// Datei ausgeben
else
{ @readfile($errfile); } // Datei fehlt, Ersatzdatei senden
}
}
?>
Aufgerufen würde über o.g. Script dann z. B. mittels
www.domain.de/x.php/bild1.jpg (Habe das veröffentlichte Script leicht modifiziert, der Link wird so nicht funktioneren).
Die "richtigen" Bilder liegen unter "/richtig",
ein Ersatzbild liegt im Verzeichnis "/falsch",
existiert kein Ersatzbild bzw. kein Original, wird "/illegal.gif" gesendet.
Ein Zugriff wird als korrekt erkannt, wenn von "domain.de" bzw. "Afterbuy.de" verlinkt wird, oder via eBay und die Auktionsnummer einer der eingegebenen Nummern (hier 1234567890) entspricht.
Der eBayJoker wird noch mit dem Referrer ersetzt, der bei der Neuanlage von Auktionen gesendet wird... man will ja nicht voreilig warnen.
Da ist sicher noch viel Platz für Optimierungen, aber es funktioniert. Einziger Haken: Gibt man den Link direkt ein, interpretiert der Browser den Bildinhalt als Text/HTML und man sieht Zeichensalat statt einem Bild.
Bei mir hat das File auch noch eine andere Endung als PHP, um den Link noch unauffälliger zu machen.