Squattage d'image
Par Papa Geek le samedi 2 mai 2009, 10:28 - Geekerie - Lien permanent
Il y a quelques mois, lors de notre déménagement, j'ai trouvé une image
rigolote que j'ai utilisée pour illustrer le billet que
j'écrivais.
Seulement depuis, cette image semble plaire à plein de gens. A tel point que
ce petit blog arrive en premier quand on cherche "demenagement" dans Google
Image :-0
Mon problème c'est quand ceux qui la reprennent sur leur blog, ne la copient
pas (comme j'avais fait), mais en utilisent l'image qui est chez moi.
En soit, ce n'est pas un drame, mais deux choses :
- ça me pourri nos statistiques de visites. Je sais que nous n'avons pas beaucoup de visiteurs, mais là, on ne peux même plus le mesurer.
- ça prend de la bande passante que nous facture NOTRE hébergeur. Vous allez me dire c'est pas grand chose, une image de 9Ko. Quand on arrive à plus de 1000 chargement par mois rien que pour les squatteurs, ça charge quand même l'ardoise de 9Mo ce qui n'est pas si négligeable.
C'est pour cela que j'ai mis en place un petit script qui vérifie la
provenance de ceux qui charge cette image. Donc si cette image vous plaît et
que vous voulez l'utiliser sur votre site/blog, ça ne me pose pas de problème,
mais copiez-la, arrêtez de squatter notre site.
Pour ceux que ça intéresserait, voici le script (il manque quelques détails
pour ne pas qu'on me squatte les images à la source):
<?php
function LoadJpeg($imgname)
{
/* Tente d'ouvrir l'image */
$im = @imagecreatefromjpeg($imgname);
/* Traitement en cas d'échec */
if(!$im)
{
/* Création d'une image vide */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
/* On y affiche un message d'erreur */
imagestring($im, 1, 5, 5, 'Erreur de chargement ' . $imgname, $tc);
}
return $im;
}
/* On test l'origine de l'image et on affiche en conséquence */
if (isset($_SERVER[HTTP_REFERER]))
{
if (isset($_GET['image']) && ereg('famillegeek', $_SERVER[HTTP_REFERER]))
{
header('Content-Type: image/jpeg');
$img = LoadJpeg('/data/images/'.$_GET['image'].'.jpg');
} else {
header('Content-Type: image/jpeg');
$img = LoadJpeg('/data/images/404.jpg');
}
} else {
if (isset($_GET['image']))
{
header('Content-Type: image/jpeg');
$img = LoadJpeg($_GET['image'].'.jpg');
} else {
header('Content-Type: image/jpeg');
$img = LoadJpeg('404.jpg');
}
}
imagejpeg($img);
imagedestroy($img);
?>
Edit : Je viens de découvrir un effet de bord de mon
script, les gens qui suivent le blog par les flux RSS ne voient pas l'image
attendue, mais une belle 404 
Je vais essayer de corriger le tir.
Edit 2 : Ca y est, j'ai modifié le script, maintenant les flux RSS affichent aussi la bonne image.
Commentaires
Tu peux utiliser le mod_rewrite aussi... Ici : tous les fichiers de la dernière ligne dont le HTTP_REFERER est différent ton URL recevront une erreur 403 (F).
RewriteCond %{HTTP_REFERER} !^http://blog\.famillegeek\.com/(.*) [NC]
RewriteRule .*\.(css|js|gif|png|jpe?g|flv|mov|avi|swf)$ - [F,L]
Utilisé sur http://www.ironframboise.fr