Kuten hyvin tiedämme voi nuo hotlinkkaukset olla ärsyttäviä ja jossain tapauksissa myös kaistaa syöviä...
Tässä 2 erilaista helppoa php-pohjaista systeemiä johon olen tässä törmannyt jotka toimivat hyvin. Molemmat toimivat sillä perusteella että tarkistetaan refer-domaini eli mistä domainista kysely tulee eikä ne myöskään salli suoraa kyselyä eli että laittaa filun nimen suoraan selaimeen. ;)
Ensimmäinen on kuvan hotlink-esto jossa kuva ajetaan php:n läpi ja jos ei domaini täsmää näyetään pirulainen kuva sen oikean sijaan ;)
Kokeiluna esim. kuva joka oikeasti näyttää kamerakuvaa täällä: http://www.nordicweather.net/cam.php
<?php
if(!isset($PHP_SELF)) {$PHP_SELF = $_SERVER['PHP_SELF']; }
$t = pathinfo($PHP_SELF);
$Program = $t['basename'];
$ourHost = str_replace('', '', $_SERVER[HTTP_HOST]);
$mc = parse_url($_SERVER['HTTP_REFERER']);
$masterHost = $mc['host'];
// If hotlinked :D
if ($ourHost <> $masterHost) {
header("Content-Type: image/gif");
$image = "hotlink.gif";
readfile($image);
exit;
}
$image = "cam.jpg";
header("Content-Type: image/jpeg");
readfile($image);
?>
Toinen on ihan perus php-skriptiä varten esim jos on sivu jota itse käyttää iframessa, ja se näyttää customitua Nginx-tyylistä virhesivua hotlinkattua sivua katselevalle, esim NWN:än Googlekartta käyttää tätä.
Koesivu tuolla: http://www.nordicweather.net/cache/hotlink.php
<?php
if(!isset($PHP_SELF)) {$PHP_SELF = $_SERVER['PHP_SELF']; }
$t = pathinfo($PHP_SELF);
$Program = $t['basename'];
$ourHost = str_replace('', '', $_SERVER[HTTP_HOST]);
$mc = parse_url($_SERVER['HTTP_REFERER']);
$masterHost = $mc['host'];
if ($ourHost <> $masterHost) {
echo '<center><h1>Forbidden</h1>We don\'t allow hotlinking.</center>
<hr><center>Nordic Weathernetwork</center>';
exit;
}
# Loput skriptistä tähän...
?>
;D