Il est heureusement assez simple supprimer la majorité des hotlinks polluants un serveur, en interdisant l'affichage d'images hébergées par nos soins ailleurs que sur son site. Ce blocage se réalise en jouant avec le mod_rewrite d'Apache, manipulable via le fichier .htaccess, ou directement dans la configuration d'Apache, si vous avez la main dessus. Seul l'exemple du .htaccess sera abordé ici, puisqu'il s'agit souvent de l'unique possibilité de configuration.

symb-stop-mod.jpg


Bloquer complètement l'affichage

La technique la plus simple à mettre en œuvre consiste à bloquer l'affichage des images via une erreur 403 d'interdiction. Pour cela le fichier .htaccess doit contenir les lignes suivantes :

# Interdir les hotlinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?votresite.tld/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?uneautresite.tld/.*$ [NC]
RewriteRule \.(gif|GIF|jpg|JPG|jpeg|JPEG|png|bmp|BMP)$ - [F]

Ici toutes les requêtes vers les fichiers se terminant par .gif, .jpg, etc seront interdites, via une erreur 403, sauf celles provenant de http://www.votresite.tld et http://www.unautresite.tld. C'est une méthode radical et économique en bande passante.


Envoyer une autre image

Une technique plus amusante consiste à afficher une autre image que celle victime d'un hotlink. Image qui contiendra par exemple l'url de votre site en gros caractères. :-)

# Remplacer les hotlinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?votresite.tld/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?unautresite.tld/.*$ [NC]
RewriteRule \.(gif|GIF|jpg|JPG|bmp|BMP|jpeg|JPEG|png|PNG)$ http://pastoutafait.org/hotlinks.jpe [L,R]

Faites en sorte, à moins de disposer d'un serveur particulièrement performant, de choisir une image d'un poids réduit. Consultez ce billet pour réduire les jpg ou png. Libre à vous néanmoins de laisser le message de votre choix dans cette image...


Un peu plus bourrin

Une méthode un peu brutale consiste à afficher sur les pages faisant du holinking un message de type "Authentification requise". Elle s'emploie en redirigeant non plus vers une interdiction ou une image alternative, mais vers un fichier contenant par exemple le code suivant :

<?php
  header('WWW-Authenticate: Basic realm="Le hotlinking c'est mal !"');
  header('HTTP/1.0 401 Unauthorized');
?>

hotlink-ait.png

Cette méthode est particulièrement pénible pour l'usager du site qui hotlink, mais demande un minimum d'attention, en particulier si de nombreuses images de votre site son "hotlinkées" sur des forums. Veillez à bien poser des conditions corrects pour ne pas mettre ce message d'authentification sur trop de pages externes, en repérant bien les sites qui hotlink vos images massivement ou qui copie/colle vos articles. Étudier les fichiers de logs ou les résultats d'un analyseur comme AwStats permet de trouver ces sites.

Voici les lignes à mettre dans votre .htaccess :

# Remplacer les hotlinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?votresite.tld/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?unautresite.tld/.*$ [NC]
RewriteRule \.(gif|GIF|jpg|JPG|bmp|BMP|jpeg|JPEG|png|PNG)$ http://pastoutafait.org/hl.php [L,R]

Les autres types de fichiers

Il est bien évidemment possible de bloquer l'accès à d'autres types de fichiers en indiquant leurs extensions.

RewriteRule .*\.(zip|avi|wmv|mpeg|mpg|mov|flv||rar|exe|mp3|swf|wma)$ http://pastoutafait.org/tarbomb.tgz [R,L]

Du hotlink sur des fichiers un peu lourds peut mettre à mal votre quota de bande passante pour peu que le site à l'origine de ces hotlinks soit bien fréquenté.


Comment ça marche ?

Le mod_rewrite d'Apache est monstrueux et permet toutes sortes de fantaisies. Au-delà de la simple réécriture d'adresse pour faire jolie, déjà bien utilisée sur ce site, il permet grâce à une combinaison de conditions et de règles d'affiner en profondeur la gestion des requêtes envoyées sur un serveur.

Voici une brève explication des lignes présentes dans le .htaccess :

<IfModule mod_rewrite.c>

Pas obligatoire sur tout les serveurs, il s'agit de vérifier la présence de mod_rewrite sur celui-ci, et de passer l'exécution des lignes suivantes en cas d'absence du module.

RewriteEngine On

Cette ligne parle d'elle même, il s'agit d'activer le moteur de réécriture.

RewriteCond %{HTTP_REFERER} !^$

Cette ligne indique que les HTTP_REFERER vident ont accès aux fichiers. La variable HTTP_REFERER permet d'identifier l'URL à l'origine de la requête.

RewriteCond %{HTTP_REFERER} !^http://(www\.)?votresite.tld/.*$ [NC]

Cette ligne permet de ne pas appliquer la réécriture aux requêtes provenant de votre site. Indispensable sous peine de ne plus voir les images sur vos propres pages. Il est bien sûr possible d'indiquer plusieurs sites, pour permettre l'affichage sur les sites autorisés. La règle "une site/une ligne" s'applique.

RewriteRule \.(gif|GIF|jpg|JPG|jpeg|JPEG|png|bmp|BMP)$ - [F]

C'est la règle. Dans cette exemple une interdiction symbolisée par ce [F].

La documentation technique de mod_rewrite est disponible sur le site d'Apache en anglais ou en français. Vous y trouverez tous les détails utiles. La signification des lettres entre crochets (NC, R, F, etc) est résumée sur une page dédiée de la documentation Apache.


Limite de ces méthodes

Les méthodes ci-dessus ne sont pas infaillibles.
Une personne capable de modifier son "HTTP_REFERER" pourra contourner vos règles et continuer à afficher les images de votre site sur le sien via votre serveur.

Cependant, mettre en place une modification du "HTTP_REFERER" est un peu lourd, et représente bien plus de travail que de simplement héberger les images sur son propre site ou sur un hébergeur spécialisé, comme ImageShack ou Hiboox. Donc la plus part du temps, le hotlinker va simplement retirer les images ou les héberger lui même pour ne pas trop se prendre la tête.


Comment réagir face au hotlinking ?
  • Assez souvent, les hotlinks ne représenteront qu'une part infime de votre consommation de bande passante. Dans ce cas, mettre en place une interdiction complète n'est pas forcement toujours très pertinent.
  • Un simple message au responsable d'un site qui hotlink vos images peut parfois suffire. De nombreux hotlinks sont réalisés sans même avoir conscience de la pénibilité de cette pratique. Alors un gentil mail expliquant en quoi le hotlink est pénible et demandant de retirer les images qui posent problèmes est déjà une première bonne façon de réagir et de régler le problème "diplomatiquement".
  • Dans le cadre du remplacement des hotlinks par une autre image, il est évidemment possible de faire dans la finesse ou dans le gros boulet... Tout dépend de votre choix concernant l'image de remplacement.
  • En cas de copier/coller complet d'articles, il peut être utile de mettre en place temporairement des règles pénibles pour inciter l'auteur du site à l'origine du plagiat à retirer/héberger les images et à indiquer l'origine du texte.
  • Dernière modification le : 10 décembre 2009 à 10:26