IBDAntiHotLinks

Cette application est destinée à mettre en place une protection contre les « hot-links » vers les ressources d’un site web (liens directs depuis un site extérieur).

Elle permet de bloquer totalement les hot-links, mais aussi de définir des règles plus fines, par exemple pour autoriser certains user-agent ou certains sites référents. Le blocage peut également être traité de différentes façons : redirection vers un autre fichier, blocage complet…

Enfin, des fonctions de traitement personnalisées peuvent être définies pour un maximum de souplesse de configuration. Un exemple de fonction personnalisée est livré avec IBDAntiHotLinks. Il permet d’effectuer automatiquement des redirections vers des billets Dotclear référençant le fichier protégé.

Dépendances : IBDInfosReferant et IBDInfosNavigateur.

Licence : GNU GPL version 2

Documentation

Installation

  • décompressez l’archive,
  • copiez le contenu du répertoire src sur votre serveur web à l’emplacement de votre choix,
  • configurez votre serveur web pour l’utilisation d’IBDAntiHotLinks (voir plus bas).

Configuration d’IBDAntiHotLinks

Editez le fichier src/config.inc.php pour modifier les paramètres suivants :

  • IBDLIBS : chemin absolu vers le répertoire contenant les librairies IBDInfosReferant et IBDInfosNavigateur,
  • ROOTPATH : chemin absolu vers le répertoire racine des ressources à protéger,
  • ERROR403 : chemin relatif vers le code PHP à utiliser pour les erreurs 403,
  • ERROR404 : chemin relatif vers le code PHP à utiliser pour les erreurs 404.

Configuration du serveur Web

Le serveur web doit être configuré pour rediriger les requêtes sur les ressources à protéger vers IBDAntiHotLinks, avec le chemin des ressources en paramètres (askedFile).

Exemple de configuration Apache, via le fichier .htaccess et mod_rewrite :

Cet exemple redirige toutes les requêtes vers des images dont le référant est
non vide et différent de votresite.tdl vers IBDAntiHotLinks.

Exemple de configuration lighttpd, via le fichier de configuration du serveur :

Définition des règles de traitement

Les règles de traitement sont stockées dans le tableau $AHLRules. Chaque élément du tableau est lui même un tableau pouvant contenir les éléments suivant :

  • patternFile : si le fichier demandé correspond à cette expression régulière, la règle sera appliquée,
  • patternAgent : si le user-agent correspond à cette expression régulière, la règle sera appliquée,
  • patternReferer : si le référant correspond à cette expression régulière, la règle sera appliquée,
  • ifBot : la règle à appliquer si le user-agent correspond à un robot connu,
  • ifImageSearch : la règle à appliquer si le référant correspond à un moteur de recherche d’images,
  • ifSearch : la règle à appliquer si le référant correspond à un moteur de recherche,
  • defaultRule : la règle à appliquer dans tous les autres cas.

Si plusieurs des champs pattern sont présents, ils sont évalués successivement avec une règle OU. Si aucun n’est présent, la règle est ignorée.

Si aucune des règles ne convient, la règle FORBID est appliquée.

Les règles ifBot/ifImageSearch/ifSearch/defaultRule sont des tableaux contenant les éléments suivants :

  • action : le type de règle (FORBID, ALLOW, REDIRECT ou HANDLER),
  • redirectRule : les paramètres pour l’action REDIRECT,
  • handlerRule : les paramètres pour l’action HANDLER.

L’action FORBID déclenche une erreur 403, l’action ALLOW renvoie le fichier demandé.

L’action REDIRECT effectue une redirection vers une autre URL. Elle prend en paramètre un tableau contenant les champs suivants :

  • httpCode : le code HTTP à utiliser pour la redirection. Les valeurs acceptées sont 301 et 302. Tout autre valeur générera un code 302,
  • pattern et replacement : les paramètres à passer à preg_replace pour générer l’URL de redirection à partir du chemin du fichier demandé.

L’action LOCALREDIRECT effectue une redirection vers un fichier local. Elle prend en paramètre un tableau contenant les champs suivants :

  • pattern et replacement : les paramètres à passer à preg_replace pour générer l’URL de redirection à partir du chemin du fichier demandé,
  • mime : le type MIME du fichier vers lequel on redirige. Si ce paramètre n’est pas renseigné, le type MIME sera déterminé automatiquement.

Sur les règles REDIRECT et LOCALREDIRECT, si replacement n’est pas renseigné, la règle est ignorée. Si pattern n’est pas renseigné, la redirection est faite vers replacement quelque soit le fichier demandé.

L’action HANDLER permet de définir une règle de traitement plus complexe, stockée dans un fichier PHP externe. Elle prend en paramètre un tableau contenant les champs suivants :

  • file : le chemin relatif vers le fichier PHP contenant la fonction de traitement,
  • func : le nom de la fonction de traitement. Celle-ci doit prendre en paramètre un unique paramètre, le chemin du fichier demandé,
  • redirectRule (optionnel) : un tableau contenant les mêmes paramètres que pour l’action REDIRECT. Si ce champ est défini, cette règle sera exécutée si le handler rend la main.

Handler Dotclear

Ce handler est fourni à titre d’exemple. Si les ressources que vous voulez protéger font partie d’un blog Dotclear, ce handler vous permettra de rediriger automatiquement les personnes accédant aux ressources vers un billet référencant la ressource protégée.

Si plusieurs billets correspondent, l’un deux est choisi, de façon aléatoire.

Si votre blog contient des billets en plusieurs langues, la redirection se fera en privilégant les billets rédigés dans les langues acceptées par le visiteur.

Historique

  • 01/16/2011, version r87 : ajout de la règle LOCALREDIRECT (renvoi vers un fichier local)
  • 05/04/2014, première version publique.

À faire

Rien pour l’instant, mais n’hésitez pas à faire des suggestions 🙂

Laisser un commentaire