Hotlinking / Pillage de contenu et de ressources : Méthode Apache+PHP radicale pour le contrer
Nombreux sont les webmasters ayant un site victime de hotlinking (associé souvent à un pillage sans vergogne de contenu).
C’est spécifiquement à la lutte contre le hotlinking (qui peut nuire à votre bande passante et à vos ressources serveur) que ce post s’intéresse. Les exemples donnés font référence à une configuration de serveur HTTP avec Apache+PHP.
Rappels sur le hotlinking
Hotlinking, direct linking, inline linking, kesako?
Selon Wikipédia (version à la création du post): “Le direct linking ou hotlinking consiste à utiliser l’adresse d’un fichier publié sur un site web, le plus souvent une image, pour l’afficher sur un autre site, sur un blog, dans un forum, etc. En d’autres termes, au lieu d’enregistrer l’image et de l’installer sur son propre serveur web, le hotlinkeur crée un lien direct vers le serveur d’origine.”
C’est par exemple si un webmaster gérant le site http://site1.example.net/ insère une balise de type <img src=”http://autre-site.example.com/picts/useful-picture.png” alt=”texte alternatif” /> pour insérer sur son site une image hébergée sur un autre serveur.
Ainsi, pour fournir l’image lorsqu’un visiteur est sur site1.example.net, c’est bien le serveur de autre-site.example.com qui donne sa bande passante et qui consomme des ressources (CPU, mémoire, etc…).
Est-ce correct d’hotlinker?
La réponse à cette question est variable suivant les situations.
Si vous n’avez pas l’autorisation (explicite ou implicite), vous devez considérer que cela n’est pas correct. C’est au minimum du vol de bande passante.
Notez qu’une licence libre n’autorise pas à hotlinker. Ce n’est pas parce qu’un site vous autorise à copier son contenu qu’il vous donne le droit d’utiliser de n’importe quelle façon les ressources de son serveur. Un exemple où cette distinction est clairement indiquée est Wikimedia commons (en anglais).
Par autorisation “explicite” j’entends les cas où un site vous autorise explicitement à hotlinker, par “implicite” je désigne les cas courants (bannières de soutien, etc…) où un site vous donne par exemple du code qui, utilisé sur votre site, fera du hotlinking.
Hotlinking et méthodes similaires
Il peut être mal vu également d’utiliser les cadres (frames, i-frames) pour afficher une page extérieure sans l’autorisation du propriétaire du site.
C’est très variable suivant les utilisations. Si vous pensez que votre utilisation est légitime, essayez au minimum de fournir un lien permettant d’afficher la page tierce en dehors de tout cadre (frame). Par ailleurs pour le visiteur il ne doit y avoir aucune ambiguïté.
(Des exemples d’utilisation corrects incluent certains moyens d’échange de liens sur réseaux sociaux. Le plus connu est volontairement non cité.)
Détection du hotlinking abusif
Certain vous diront que c’est simple…
Le hotlinking produit, dans la très grande majorité des cas, des traces aisément détectables sur le serveur sur lequel se trouve l’image ou la ressource accédée.
En effet, la grande majorité des navigateurs incluront dans leur requête au serveur, l’information “Referrer” qui indiquera quelle page a fait référence à l’objet. Notez que cette en-tête est le même que lorsque le visiteur accède à une page en utilisant un lien provenant d’une autre page.
La détection peut donc se faire très souvent en observant le champ referrer dès que la ressource accédée n’est pas une page web.
Dans un fichier de log provenant d’Apache, cette information est usuellement reprise dans une des colonnes (selon configuration). Pour le fichier .htaccess et les RewriteCond, il vous faudra utiliser la variable HTTP_REFERER.
RSS, Atom, et tant pis pour la détection automatique
Le souci avec ce qui est marqué au dessus, c’est que dès que vous avez un flux rss ou atom, les lecteurs de flux en lignes en ligne (ou web-agrégateurs, en gros Google Reader, Netvibes et les concurrents) feront aussi envoyer par le navigateur du visiteur un champ referrer faisant penser à du hotlinking.
Cependant, dans ce cas l’utilisation est légitime (il n’y a pas de raison de considérer déloyal le fait d’utiliser un lecteur de flux en ligne plutôt qu’une application spécifique).
De plus, on ne peut pas connaître la liste des sites faisant office de lecteurs de flux en ligne (pour la bonne raison que chacun peut en installer un sur son site si cela lui plaît).
Je ne peux donc que déconseiller (pour les sites ayant un flux) les méthodes qui visent à faire un filtrage brut (et ici, exemple du très connu blog presse-citron) pour contrer de façon automatisée les hotlinkers.
Donc au final, on fait comment pour détecter?
Je conseille de faire de la détection après coup, en examinant régulièrement les fichiers de logs.
Le schéma de la méthode est le suivant :
- Commencez par extraire de façon automatique les lignes correspondants à du possible hotlinking (avec le HTTP_REFERRER, uniquement pour ce qui n’est pas une requête de page web).
- Supprimez tout ce qui correspond à un lecteur de flux en ligne connu.
- Triez les cas par ordre décroissant de requêtes (ou de bande passante utilisée) : autant vérifier en priorité (ou uniquement) ce qui vous consomme le plus de ressources…
- Rendez vous sur les sites mentionnés pour vérifier manuellement.
Une fois que vous avez détecté du hotlinking abusif
Contacter, Vérifier, etc.
Souvent, le webmaster responsable de hotlinking ne le fait pas volontairement. Pensez donc à prendre contact et à vérifier qu’il s’agit vraiment de hotlinking abusif avant d’utiliser les méthodes les plus radicales…
Dans la suite on supposera que vous connaissez la source du hotlinking, et que vous avez fait les vérifications nécessaires.
Agir : Méthode 1 : Remplacement d’images
Je considère ça comme étant une méthode soft. Il s’agit de remplacer l’image par une autre pour avertir le lecteur de la page du site fautif. Le blog presse-citron donne un peu plus de détails à ce sujet…
Cette méthode étant classique et facile à mettre en œuvre, je ne la détaille pas plus.
Agir : Méthode 2 : Refus de délivrer l’image
Pareil : simple et classique. Ça a l’avantage d’économiser de la bande passante, par contre ce n’est pas très dissuasif…
Agir : Méthode 3 (quelque peu plus offensive) : Utilisation du statut HTTP 401 (lié à l’authentification)
Cette méthode est à la fois économe en bande passante et très dissuasive.
Au lieu de donner l’image (ou autre ressource), une autre image, ou de refuser directement de la donner, il est possible de demander au visiteur de la page du site fautif de “s’identifier” auprès de votre serveur (qui contient la ressource accédée de façon douteuse).
En fait, il ne s’agit pas d’attribuer un login+mot de passe à la ressource, mais simplement de faire afficher au navigateur une belle boite bien visible contenant un message de votre choix. Message qui bien entendu n’a aucune obligation d’être du goût du webmaster commettant des abus (enfin respectez la loi et n’insultez pas injustement non plus…).
Pour cela, il suffit de mettre dans votre fichier .htaccess une règle correspondant à l’accès interdit (correctement identifié) pour rediriger vers un fichier php contenant le code suivant (à modifier à votre guise) :
<?php
header('WWW-Authenticate: Basic realm="Go to http://hotlinking.example.net/ (abusive use of our content/hotlinking issue)"');
header('HTTP/1.0 401 Unauthorized');
L’effet est bien visible (au moins sur firefox) et est à mon avis quelque peu plus dissuasif qu’une image modifiée…
Vous pouvez voir une démo en visitant ce lien avec le mot de passe “iwanttotest” (sans guillemets).
Pensez bien entendu à créer sur votre site une page expliquant le problème du hotlinking et à pointer vers elle dans le code précédent modifié.
Conclusion
Le hotlinking abusif, c’est mal. Lorsqu’il est commis de mauvaise foi, il n’y a aucune raison d’hésiter à prendre les moyens nécessaires pour le contrer.
Plutôt que de prendre le risque de faire des victimes collatérales (ceux qui vous lisent à travers un lecteur de flux en ligne), je préconise de cibler après avoir vérifié manuellement. Par contre, je considère normal de taper fort lorsque c’est mérité. La méthode basé sur le statut http 401 (ci-dessus) me semble particulièrement adaptée pour cela.
Note: version (très résumée) en anglais.
Adresse de l’original : http://www.daviddallet.com/weblog/posts/2009/06/30/hotlinking-apache-php-htaccess-401/
Article original écrit par David Dallet, sous licence libre CC-BY-SA France 2.0 – Pour copier cet article merci de conserver cette notice ainsi que le lien vers l’original. En cas de modification (ou de copie partielle), le lecteur doit être clairement informé.
Hotlinking / Pillage de contenu et de ressources : Méthode Apache+PHP radicale pour le contrer
(fr) Commenter cet article - Partager - Lire un autre article (Blog de David Dallet)
(en) Comment this post - Share It - Read another post on David Dallet's Weblog