Contenu Copié ? Image trackée !

écrit par Aymeric

Le contenu dupliqué mais surtout le contenu volé est une véritable plaie. Nous cherchons tous à avoir du contenu unique pour ne pas passer dans le filtre Anti Duplicate Content de Google.
Grâce au HTTP_REFERER, il est possible de connaître l'URL d'un site qui ferait appel à vos images en direct. N'ayant pas codé depuis longtemps et sur une idée de l'ami @jambonbuzz (SEO chez Miwim), je me suis décidé à écrire un petit script afin de détecter les plagiaires via un tracking d'images.

Un mouchard via les images

Quand un webmaster peu scrupuleux copie/colle votre article sans même se donner la peine de réuploader les images (il va probablement les linker directement), cela vous coûtera de la bande passante à chaque fois que son article plagié sera affiché mais c'est aussi une véritable aubaine, il embarque un mouchard sur son site (via $_SERVER['HTTP_REFERER']) et nous allons en profiter.
Avec ce script, vous serez alerté par e-mail dès qu'une image de votre site Web (ex: image d'un billet sur votre blog) est appelée par un autre site: votre contenu a peut être été plagié...Pourquoi ne pas avoir fait un plugin? Parce qu'il n'y a pas que WordPress dans la vie et que ce code peut fonctionner avec d'autres CMS (Drupal, Magento...). Cela dit si vous avez WordPress, je vous recommande l'excellent plugin No Duplicate de @seoblackinside

Comment ça marche?

Shipper, arrête de chiper!1) on détecte que chaque image est bien appelée par le site lui même (et non un autre site Web) via le fichier .htaccess
2) on va réécrire les URL des fichiers .gif,.jpg,.png pour toutes les images qui ne sont pas affichées via votre site afin d'appeler le script PHP.
3) on va enregistrer cette URL dans un fichier qui stockera toutes les URL faisant du Hotlinking. Si l'URL n'avait pas déjà été détectée par le script, le serveur va vous envoyer un email pour vous signaler un éventuel copieur/voleur.

4)Deux possibilités:
- on charge l'image avec ses en-têtes via le code PHP et on la renvoie pour qu'elle soit affichée (script Version 1)
ou
- on affiche une image générée dynamiquement qui indique que l'image a été volée et d'ou provient l'originale (script Version 2)

Le script PHP

Voici le script à uploader à la racine de votre site Web (nommez-le hotlinking.php)
(n'oubliez pas de modifier l'adresse email)

Version 1 / On affiche l'image comme si de rien n'était

<?php
//Changer votre adresse email ici:
$monemail='matt.cutts.is.god@gmail.com';
######################################
###### Hotlinking tracker v1.0 #######
###### ----------------------- #######
###   Script provenant du site:    ###
###   http://www.yapasdequoi.com   ###
###                                ###
###           Sur Twitter:         ###
###      **  @aymerictwit  **      ###
###                                ###
######################################
$hotlinkurl=strip_tags($_SERVER['HTTP_REFERER']);
$file=strip_tags($_GET['pict']);
$filepath=$_SERVER['DOCUMENT_ROOT'].$file;
$filename='hotlinking-urls.txt';
//En-tetes de l'e-mail
$headers ='From: "Veilleur de Hotlinking"<'.$monemail.'>'."\n";
$headers .='Content-Type: text/plain; charset="utf-8"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$mime=array(
    'jpg'=>'image/jpeg',
    'png'=>'image/png',
    'gif'=>'image/gif'
  );

//on securise, merci @zizounnette
$match_ext = false;
foreach ($mime as $ext => $val) {
 	if (substr($file,-3) == $ext)
 		$match_ext = true;
 }
if (!$match_ext) die(); //logger éventuellement ce qui a été demandé
if (!getimagesize($filepath)) die(); //logger éventuellement ce qui a été demandé

if (file_exists($filename)) {
        $filecontent=file_get_contents($filename);
}
$string = strpos($filecontent, $hotlinkurl.';');
if ($string === false)
{
$pourlemail.= 'Une nouvelle URL hotlink une image: plagiaire ou simple voleur de bande passante? '."\n\n";
$pourlemail.= 'URL qui hotlink mon image: '.$hotlinkurl."\n".'Image volée: '.$_SERVER['HTTP_HOST'].$file."\n\n";
$pourlemail.= 'URL\'s précédemment repérées:'."\n".str_replace(';','',$filecontent);
mail($monemail,'Nouvelle URL qui hotlink mes images',$pourlemail,$headers);
$filecontent.= $hotlinkurl.';'."\n";
file_put_contents($filename,$filecontent);
}
  $stat=stat($filepath);
  header('Content-Type: '.$mime[substr($file,-3)]);
  header('Content-Length: '.$stat[7]);
  header('Last-Modified: '.gmdate('D, d M Y H:i:s',$stat[9]).' GMT');
  readfile($filepath);
  exit();
?>

Version 2 / On affiche une image dynamique qui grille le voleur

<?php
//Changer votre adresse email ici:
$monemail='matt.cutts.is.god@gmail.com';
######################################
###### Hotlinking tracker v2.0 #######
###### ----------------------- #######
###   Script provenant du site:    ###
###   http://www.yapasdequoi.com   ###
###                                ###
###           Sur Twitter:         ###
###      **  @aymerictwit  **      ###
###                                ###
######################################
$hotlinkurl=strip_tags($_SERVER['HTTP_REFERER']);
$file=strip_tags($_GET['pict']);
$filepath=$_SERVER['DOCUMENT_ROOT'].$file;
$filename='hotlinking-urls.txt';
//En-tetes de l'e-mail
$headers ='From: "Veilleur de Hotlinking"<'.$monemail.'>'."\n";
$headers .='Content-Type: text/plain; charset="utf-8"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$mime=array(
    'jpg'=>'image/jpeg',
    'png'=>'image/png',
    'gif'=>'image/gif'
  );

//on securise, merci @zizounnette 🙂
$match_ext = false;
foreach ($mime as $ext => $val) {
 	if (substr($file,-3) == $ext)
 		$match_ext = true;
 }
if (!$match_ext) die(); //logger éventuellement ce qui a été demandé
if (!getimagesize($filepath)) die(); //logger éventuellement ce qui a été demandé

if (file_exists($filename)) {
        $filecontent=file_get_contents($filename);
}
$string = strpos($filecontent, $hotlinkurl.';');
if ($string === false)
{
$pourlemail.= 'Une nouvelle URL hotlink une image: plagiaire ou simple voleur de bande passante? '."\n\n";
$pourlemail.= 'URL qui hotlink mon image: '.$hotlinkurl."\n".'Image volée: '.$_SERVER['HTTP_HOST'].$file."\n\n";
$pourlemail.= 'URL\'s précédemment repérées:'."\n".str_replace(';','',$filecontent);
mail($monemail,'Nouvelle URL qui hotlink mes images',$pourlemail,$headers);
$filecontent.= $hotlinkurl.';'."\n";
file_put_contents($filename,$filecontent);
}
   $extension=substr($file,-3);
  list($width, $height, $type, $attr)=getimagesize($filepath);
  header('Content-Type: '.$extension);
  header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()).' GMT');
  $im = @imagecreate($width,$height)
  or die("Impossible d'initialiser la librairie GD");
  $background_color = imagecolorallocate($im, 0, 0, 0);
  $text_color = imagecolorallocate($im, 233, 14, 91);
  imagestring($im, 3, 15, 5, parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST), $text_color);
  imagestring($im, 3, 15, 40, "a volé une image du site", $text_color);
  imagestring($im, 3, 15, 75, $_SERVER['HTTP_HOST'], $text_color);
  imagestring($im, 3, 15, 110, "C'est mal!", $text_color);
switch ($extension){
case "jpg":
imagejpeg($im);
break;
case "gif":
imagegif($im);
break;
case "png":
imagepng($im);
break;
}
imagedestroy($im);
exit();

?>

Modification à effectuer dans le .htaccess

Code à ajouter dans le fichier .htaccess à la racine de votre site Web:
(n'oubliez pas de modifier l'URL de votre site)

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.urldemonsite.com/$ [NC]
RewriteRule (.*).(gif|png|jpe?g) /hotlinking.php?pict=%{REQUEST_URI} [L,NC]

Et après ?

Vous recevrez un email dès qu'une de vos images est hotlinkée avec l'URL coupable. Pensez à vérifier votre dossier Spam sur Gmail (il me filtre les alertes envoyées). N'hésitez pas si vous avez des suggestions pour ajouter des fonctionnalités à ces premiers bouts de codes, ce script est amené à évoluer 😉 Libre à vous de restreindre par la suite certains sites afin qu'ils ne puissent pas hotlinker vos images via le fichier .htaccess. ENJOY!

Astuce: Si vos articles n'ont pas d'images, pensez au pixel transparent...

écrit dans Scripts SEO par Aymeric | 46 commentaires

46 commentaires "Contenu Copié ? Image trackée !"

  • Niko dit:
  • vincent dit:
  • DjibouTeaM dit:
  • Ed dit:
  • Keeg dit:
    • Aymeric dit:
  • Sylvain dit:
  • sylvain dit:
  • lionel dit:
  • seofever dit:
  • J.M Ciéry dit:
  • Diije dit:
  • Aurélien dit:
  • Mikiweb dit:
  • Diije dit:
  • LeMoussel dit:
  • Eric dit:
  • Cédric G. dit:
  • Le Juge dit:
  • N41M4 dit:
  • Soul dit:
  • Marian dit:
  • N41M4 dit:
  • Médard dit:
  • Exar Kun dit:
  • Naxelana dit:
  • Marjo dit:
  • arthus dit: