Le Hotlinking c’est quoi ?

Le Hotlink (ou lien à chaud) consiste à afficher une image d’un site sur un autre site. Le site « voleur » qui affiche votre image tire le bénéfice de la notoriété de  votre image et vous, vous payez le trafic et assumez le ralentissement de votre site du au chargement de ces images.

La méthode explicité ci-dessous ne traite pas des images copiées (photo sauvegardée puis copiée sur le serveur du voleur).

Principe

La méthode explicitée ici est inspirée du plugin WordPress Pictpoket . Le Plugin WordPress identifie les sites voleurs puis modifie le fichier .htacces, selon l’action a faire : Soit afficher une image de remplacement, soit afficher un message, soit autoriser le hotlink.

Ici les actions sont gérées en bases de données, vous pouvez gérer plusieurs sites, plusieurs images de remplacement, et plusieurs textes de messages, le fichier .htacces, n’est pas modifié si ce n’est a l’installation dans chacun de vos sites a protéger. Un historique des affichages est géré si vous le souhaitez.

Prérequis

Pour installer cet utilitaire vous devez  installer les fichiers soit dans un répertoire, soit un sous domaine. Vous devez disposer d’une base de données Mysql et de Php version  au moins.

Chez 1&1 pour activer php5 vous devez rajouter la ligne suivante dans .htaccess  (celui ou vous installer le logiciel de détection des hotlinks) :

AddType x-mapp-php5 .php

Le serveur ou est installé votre site doit supporter l’Url Rewriting ce qui n’est pas le cas chez free.fr par exemple.

Installation

L’installation est manuelle, pas de script tout fait ! comptez trente minutes pour installer et paramétrer la protection contre le hotlink.

Télécharger le zip

Télécharger

Une fois téléchargé dé zippez l’archive sur votre disque, des fichiers de configuration sont à modifier avant de copier vers votre serveur.

2) Modifier le fichier Config

Ce fichier est situé dans le répertoire v_include et se nomme : config.php, ce fichier contient les variables qui contrôlent l’application.

// Variables de connexion à la base de données MySQL
$DbHost = ‘127.0.0.1’;
$Db = ‘nom_bdd’;
$DbUser = ‘bdd_user’;
$DbPass = ‘bdd_passe’;

$prefixe = ‘vph_’;                     // Préfixe du nom de vos tables
$tabsite = $prefixe . ‘sites’;
$tablink = $prefixe . ‘links’;
$tabhist = $prefixe . ‘histo’;

$domins = ‘www.votredomaine.com’;
$defimg = ‘http://’ . $domins . ‘/vole.gif’;
$deftxt = ‘Ce site affiche des photos volées’;
$defhis = 0;

$ligpage = 50;

$from_email = « panimoun@domaine.com »; // Adresse From
$envoi_email = « monmail@mondomaine.com »; // Mail to

$pseudo = « nhl »; // Pseudo
$md5pas = « 19731a20512dd98cb54c3c178c2ab98c »; // Mot de passe MD5 NoHotLink

?>

$DbHost : Indiquez le nom du host contenant votre base de données.
$Db : Indiquez le nom de votre base de données.
$DbUser : Indiquez le code utilisateur pour se connecter a votre base de données.
$DbPass : Indiquez le mot de passe de l’utilisateur pour se connecter à la base de données

$prefixe : Préfixe à rajouter aux noms de vos tables, si vous modifiez ce paramètre, vous devrez modifier le script de création des tables.
$tabsite : Nom de la table des sites (vos sites a protéger), si vous modifiez ce paramètre, vous devrez modifier le script de création des tables.
$tablink : Nom de la table des liens (actions a faire par hotlink), si vous modifiez ce paramètre, vous devrez modifier le script de création des tables.
$tabhist : Nom de la table historique (historiques des hotlinks), si vous modifiez ce paramètre, vous devrez modifier le script de création des tables.

$domins : Indiquez le nom de domaine ou sous-domaine où est installé la protection hotlink, n’indiquez par le http:// initial ni le backslash à la fin .
$defimg : Indiquez l’url de l’image par défaut en cas de protection image.
$deftxt : Indiquez le texte par défaut à afficher en cas de protection par texte.
$defhis : Modifiez la valeur a 1 pour que chaque affichage hotlink soit inscrit dans l’historique. Nous vous conseillons de laisser ce paramètre à 0 afin de ne pas surcharger la table historique. Vous pourrez modifier au coup par coup cette valeur pour suivre l’historique sur une site « voleur ».

$ligpage: Indiquez le nombre de lignes a afficher par page dans l’historique ou la listes des hotlinks.

$from_email: Indiquez  une adresse email dans le cas d’envoi d’alertes par mail. Cette adresse ne doit pas forcément exister, cette adresse peut être rajoutée dans votre liste verte afin que les mails d’alerte ne tombent pas dans le dossier des spams.
$envoi_email: Indiquez l’email sur lequel vous souhaitez recevoir les mails d’alerte, en cas de nouvel hotlink détecté. Laissez la valeur vide si vous ne souhaitez pas recevoir de mail d’alerte.

 

$pseudo : Indiquez le pseudo pour vous connecter a votre espace membre.
$md5pas : Indiquez le mot de passe crypté MD5, le mot de passe par défaut est « NoHotLink » (attention aux majuscules et minuscules). MD5 permet de crypter une chaine de caractères de manière irréversible. Dans le zip le fichier md5.php vous permet de calculer la valeur MD5 d’un autre mot de passe.

3) Créer les tables SQL

Les instructions de création des tables sont situées dans le fichier install.txt du répertoire v_script. Si vous avez modifié le nom des tables dans le fichier config.php, vous devez adapter le fichier install.txt en conséquence.

Ouvrez PhpMyAdmin par exemple pour créer vos tables.

4) Copier les fichiers sur votre serveur

Vous pouvez maintenant à l’aide de votre client FTP copier les fichiers contenus dans l’archive qui doivent être dans un répertoire de disque) sur votre serveur, voilà ce que doit contenir le répertoire :

11/05/2011  16:21              .
11/05/2011  16:21              ..
15/04/2011  10:41                26 .htaccess
03/03/2011  13:50               190 deconnect.php
10/05/2011  15:33             2 496 enregistre.php
23/04/2011  11:33             8 548 histo-maj.php
22/04/2011  15:29            12 988 histos.php
09/05/2011  18:46             3 104 index.php
23/04/2011  11:34            13 409 lnktyp-maj.php
22/04/2011  14:32            12 995 lnktyp.php
18/05/2007  08:00               713 md5.php
27/04/2011  17:34           121 833 photopag.jpg
27/04/2011  15:48           122 692 photovolee.jpg
15/04/2011  13:37                25 php.ini
11/05/2011  16:09             1 827 quoifaire.php
13/04/2011  15:21             4 592 site-maj.php
13/04/2011  15:19             4 245 sites.php
03/11/2010  10:54               981 suppr.gif
11/12/2005  11:32            23 003 vole.gif
09/05/2011  18:15              v_classes
11/05/2011  16:10              v_include
10/05/2011  16:43              v_script
17 fichier(s)          333 667 octets
5 Rép(s)  54 691 737 600 octets libres

Sous répertoire v_classes : Contient les classes qui gèrent les tables de la base de données.
Sous répertoire v_incude : Contient des fichiers php et des images. Le fichier config.php doit être modifié avant copie comme vu au 2). Il ext conseillé également de modifié la clé de cryptage située sur la deuxième ligne du source fonctions.php. Le cryptage est utilisé pour échanger des paramètres.
Sous répertoire v_script : Contient le script de création des tables mysql, inutile de copier ce sous répertoire sur votre serveur.
Les fichiers du répertoire principal : Nous explicitons dans la suite les fichiers particuliers a ne pas copier obligatoirement sur votre serveur. Tous les fichiers non commentés dans la suite sont à copier.
.htaccess : Ce fichier contient la directive « AddType x-mapp-php5 .php » dans mon cas ou la protection est installé sur un serveur 1and1. Cette directive permet d’activer Php 5 obligatoire pour le bon fonctionnement de la protection.  Si Php 5 est activé par défaut sur votre serveur ce fichier est inutile.
md5.php : Exécutez ce fichier pour générer le cryptage Md5 d’un mot de passe, nous vous conseillons vivement de modifier le mot de passe par défaut !!!
photopag.jpg : Une image que j’utilise comme image de substitution.
photovolee.jpg : Une image que j’utilise comme image de substitution.
php.ini : Ce fichier contient la directive « allow_url_fopen = On » dans mon cas ou la protection est installé sur un serveur 1and1. Cette directive active les versions étendues des fonctions d’accès aux fichiers, nécessaire pour le bon fonctionnement de la protection. Si cette option est activé par défaut sur votre serveur ce fichier est inutile.
suppr.gif : Une image que j’utilise comme image de substitution.
vole.gif : Une image que j’utilise comme image de substitution, c’est mon image par défaut

5) Indiquer les sites a protéger

A ce stade vous devriez pouvoir vous connecter a votre espace membre :

Entrez votre pseudo et mot de passe, par défaut vous devriez arriver sur la liste de vos sites a surveiller :

Pour ajouter un site cliquez sur le bouton  :

Indiquez simplement l’url de votre site, puis cliquez sur . Après validation, une nouvelle ligne s’affiche avec l’url du site à protéger. Notez le numéro attribué (Colonne de gauche), il vous servira dans la suite.

6) Modifier le fichier .htacces

Le fichier .htaccess est un fichier de configuration d’Apache, logiciel installé sur votre serveur et qui gère le protocole d’échange entre votre navigateur et le serveur. Ce fichier .htaccess n’existe pas forcement sur votre serveur dans ce cas il faudra le créer. Vous pouvez avoir plusieurs fichiers .htaccess sur votre hébergement, dans des sous répertoires, dans ce cas vous devez modifier tout ces fichiers de la même manière.

Ouvrez le fichier .htaccess grâce a votre éditeur de texte favori et ajoutez ces lignes :

# Début Protection des images
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?feedburner.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?google.com/reader(/)?.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?google..*(/)?.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://images\.google..*(/)?.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://maps.google.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?bing.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://images.yandex.ru/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://(.+\.)?yahoo.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://(.+\.)?ask.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://(.+\.)?voila.fr/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.votredomaine.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://(.+\.)?monsite1.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://(.+\.)?monsite2.com/.*$ [NC] RewriteCond %{REQUEST_URI}  !^/logo120x90.gif [NC] RewriteRule (.*)\.(gif|GIF|jpg|JPG|bmp|BMP|jpeg|JPEG|png|PNG)$ http://www.votredomaine.com/quoifaire.php?site=1&img=http://www.site-a-proteger.com/$1.$2 [L] # Fin Protection des images

Vous devez adapter ces lignes comme suit :

RewriteEngine on : Directive pour activer la réécriture d’URL
RewriteCond : Ces ligne définissent des conditions d’application, la liaison entre ces ligne et le ET logique, pour utiliser le OU logique, ajouter [OR] en fin de ligne. Chaque ligne consiste a tester une variable serveur avec une expression régulière étendue.
Par exemple RewriteCond %{HTTP_REFERER} !^http://images\.google..*(/)?.*$ [NC] : %{HTTP_REFERER} est une variable qui représente l’URL origine de la demande, cette Url est comparée à la chaine qui suit. ! exprime la négation,^le début de la chaine, $ la fin d’une chaine, [NC] pour ne pas tenir compte des minuscules et majuscules. Cela signifie donc que si l’Url qui charge l’image provient de Google image, on laisse passer.
RewriteCond %{HTTP_REFERER} !^http://www.votredomaine.com/.*$ [NC] : Remplacez www.votredomaine.com par l’Url ou vous avez placé la protection c’est a dire la valeur définie au 2) dans votre fichier config.php : $domins = ‘www.votredomaine.com’;
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?monsite1.com/.*$ [NC] : Indiquez vos sites a exclure du contrôle, y compris le site encours ou vous installez ce fichier .htaccess.
RewriteCond %{REQUEST_URI}  !^/logo120x90.gif [NC] : La variable %{REQUEST_URI} représente l’élément demandé de la requête. Ici on laisse passer une image particulière, un logo utilisé pour les échanges de lien par exemple. Supprimez cette ligne si vous n’en avez pas besoin

RewriteRule (.*)\.(gif|GIF|jpg|JPG|bmp|BMP|jpeg|JPEG|png|PNG)$ http://www.votredomaine.com/quoifaire.php?site=1&img=http://www.site-a-proteger.com/$1.$2 [L] : Après avoir décrit toutes les conditions, on décrit la règle. Remplacez /www.votredomaine.com par l’Url ou vous avez placé la protection c’est a dire la valeur définie au 2) dans votre fichier config.php : $domins = ‘www.votredomaine.com’; .
Dans l’expression ?site=1, remplacez le chiffre 1 par le numéro de site attribué a l’étape 5).
Remplacez www.site-a-protéger.com par l’Url ou vous allez installer ce fichier .htacces. Indiquez le répertoire et/ou sous répertoire le cas échéant.

Copiez ensuite le fichier .htacces vers votre serveur.

7) Vérification

Vérifiez que votre site affiche toujours les images ! Il n’y a plus qu’à attendre.

Détection d’un site « voleur »

Si vous avez choisi la détection par mail vous serez averti par un  mail :

Dans tous les cas retournez dans votre administration pour définir l’action a effectuer au chargement d’images par ce site. Une fois connecté le menu est proposé :

Déconnexion: Pour vous déconnecter de votre espace membre.
Sites : La liste des site que vous surveillez. C’est cet écran qui est affiché par défaut à la connexion.
En attente : Les sites qui sont en attente de traitement.
Texte : Les sites « Voleur » avec une protection de type « Texte ».
Image : Les sites « Voleur » avec une protection de type « Image de substitution ».
Historique : Historique de tous les affichage, si celui ci est géré (Option a activer dans le config.sys). Nous vous conseillons de ne pas gérer l’historique, qui a tendance a grossir très vite.

Dans notre cas cliquons sur l’option « En Attente » pour sceller le sort de ce site. La liste de tous les sites « En attente » s’affiche :

La boite de recherche permet de faire des recherches ciblés dans vos listes.

Pour définir l’action a effectuer pour ce cas, cliquez sur le numéro de la ligne dans la colonne de guache, dans notre cas cliquons sur « 508 » :

1) Numéro : Numéro de la ligne créé. Ce numéro est incrémenté automatiquement.
2) Site : Votre site concerné par le vol de photo.
3)  Url Voleur : Url du site voleur.
4) Image volée : Url complète de l’image de l’image volée sur votre site.
5) Url complète : Url complète ou est située votre image.
6) IP : Adresse IP de la consultation de la page contenant l’image.
7) IP décodée : Adresse IP décodée de la consultation de la page contenant l’image.
8) Mode de traitement : Indiquez ici l’action a effectuer a chaque fois que l’Url Voleur (3) essayera de charger une image de votre site (2). Choisissez dans la liste : le mode de traitement :

  • A traiter : Dans l’attente d’une décision.
  • Protection texte : Pour afficher une boite d’authentification avec un texte choisi.
  • Protection image : Pour afficher une autre image que celle demandée.
  • Autorisé : Pour autoriser le site (3) a utiliser les images du site (2)

9) Image de substitution : Dans le cas d’un mode de protection image (8), indiquez ici l’Url complète de l’image a afficher. Si ce champ est vide, c’est l’image par défaut défini dans le fichier config.php qui est utilisé.
10) Texte a afficher : Dans le cas d’un mode de protection texte(8), indiquez ici le texte a afficher dans la boite d’authentification. Si ce champ est vide, c’est le texte par défaut défini dans le fichier config.php qui est utilisé.
11) Nombre affichage : Nombre de fois ou le site (3) a afficher une image du site (2). Pour gérer cette information, l’historique (14) doit être égal à Oui, sinon ce champ restera toujours à 1.
12) Date création : Date de création de cet enregistrement.
13) Date mise à jour : Date de mise à jour de cet enregistrement. Pour gérer cette information, l’historique (14) doit être égal à Oui, sinon ce champ restera toujours égal à la date de création (12).
14) Historique : Indiquez « Oui » si vous souhaitez gérer l’historique sur cet enregistrement. Attention l’utilisation de l’historique risque de ralentir votre site

 

Share This

Share this post with your friends!