Sélectionner une page

Nginx : protection des hotlinks par réécriture

Ou : comment punir les voleurs de tableaux !

Presque tous ceux qui gèrent un site web avec des contenus rédactionnels sur Internet connaissent ce phénomène : le vol d'images par hotlink.
Et de préférence avec un texte entièrement copié, que l'on a passé des heures à rechercher, à écrire et à relire.

Cet article a été mis à jour pour la dernière fois le 14 avril 2022.

info
Écrit par Saskia Teichmann
le 31 janvier 2016
Envoi
Revue des utilisateurs
0 (0 vote)
Commentaires Classement 0 (0 examen)
Protection des hotlinks ∙ protéger les médias ∙ nginx
Nginx : Instructions - Configurer la protection des hotlinks

Il n'y a même pas de lien retour vers son propre site web, à moins que le voleur de contenu n'ait tout simplement copié-collé le contenu complet du texte source vers son site web. Il peut alors arriver que l'on ait créé quelque part un lien vers une autre contribution personnelle avec l'URL complète. Et ce lien est alors encore contenu dans le texte. Mais d'abord, respirez et first things first :

Qu'est-ce qu'un hotlink ?

Un hotlink est par exemple l'intégration d'une image par un lien direct vers l'URL existante. Sans télécharger l'image au préalable, la charger sur un espace web ou un serveur propre et la lier ensuite à partir de là.

Les hotlinks ne sont pas mauvais en général. Du moins, pas si le hotlinking a été convenu entre eux ou si l'on est un service de téléchargement d'images.
Dans la plupart des cas, on n'est toutefois pas un service de téléchargement d'images, mais simplement quelqu'un qui paie sagement son hébergement web chaque mois et qui a une certaine limite de trafic. Et c'est là que nous entrons dans le vif du sujet.
Si quelqu'un d'autre affiche sur sa page d'accueil des fichiers multimédias qui se trouvent sur votre serveur web, votre serveur sert chacune de ces requêtes étrangères, car c'est ce que font les serveurs. Ils servent.

Le voleur de contenu a maintenant une image gratuite sur son site web, pour laquelle aucun trafic n'est généré/facturé sur son propre serveur. Ce trafic (charge du serveur) est facturé à la personne volée, c'est-à-dire vous, et coûte des ressources de serveur : et ce à chaque fois qu'un visiteur surfe sur la page du voleur de contenu et que l'image s'affiche dans son navigateur Web.
Dans certaines circonstances, cela peut entraîner un trafic étranger incroyable. Cela dépend du trafic de visiteurs que le voleur de contenu a sur son site.
Ce n'est vraiment pas drôle.

Je voudrais vous montrer aujourd'hui comment configurer votre propre serveur web NGINX pour qu'il ne serve pas ces requêtes étrangères comme prévu, mais qu'il serve plutôt une autre image aux visiteurs du site web voleur de contenu.
En effet, vous pouvez ainsi inverser le préjudice supposé et en tirer profit, et si vous êtes vraiment en colère, vous pouvez encore donner un coup de pied au voleur : attirez les visiteurs sur votre propre site web !

Comment faire de NGINX un adversaire final de Hotlink invincible !

Voilà le plan :

  • Nous voulons une solution globale qui fonctionne pour tous les domaines. De manière à ne pas devoir adapter chaque configuration vHost (sites-available).
  • Le lien de demande doit être réécrit (rewrite) et ainsi servir à la place une certaine image différente à la page du voleur
  • Il doit fonctionner avec Google Recherche d'images et d'autres moteurs de recherche avec fonction de recherche d'images, au lieu d'interdire globalement le hotlinking. Sinon, Google Recherche d'Images n'affichera plus vos images, mais seulement l'image d'échange.

Solution au vol d'images

Ces quelques lignes de code sont en fin de compte la solution au problème du vol d'images. Vous apprendrez dans la section suivante comment et où placer le code.

location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|swf)$ {
  add_header "Access-Control-Allow-Origin" "*" ;
  access_log off ;
  log_not_found off ;
  expires max ;
  valid_referers none bloqué ~.google. ~.bing. ~.yahoo. ~.yandex. server_names ~($host) ;
    if ($invalid_referer) {
      rewrite (.*) /hotlink/achtung-inhalt-und-bilderklau.png redirect ;
      }
}
#hotlink terminer la boucle de redirection
location = /hotlink/achtung-inhalts-und-bilderklau.png { }

Que fait le code ?

~ est utilisé pour tenir compte des majuscules et des minuscules, tandis que ~* Majuscules et minuscules ignorées.

NGINX vérifie la règle de localisation dans l'ordre dans lequel les expressions régulières sont insérées. Cela signifie que les instructions d'en-tête de mise en cache des fichiers multimédias et les instructions de notre protection des hotlinks doivent se trouver dans le même bloc !

location = /hotlink/achtung-inhalt-und-bilderklau.png { } est nécessaire pour éviter une boucle de transmission infinie lors de la nouvelle demande sur l'image d'échange :
Le site voleur d'images envoie une demande d'imageA → notre NGINX redirige la demande d'image d'échange → le site voleur d'images envoie une demande d'image d'échange → notre NGINX redirige la demande d'image d'échange, mais ne sert pas → et ainsi de suite...

Image de remplacement en cas de vol d'image

$host est une variable qui rend cette instruction utilisable globalement et fonctionne sous tous les domaines vHost sur le serveur web. L'URL suivante est affichée valablement pour chaque domaine : http://$host/hotlink/achtung-inhalts-und-bilderklau.png

Il suffit de créer sous chaque domaine le répertoire /hotlink et un fichier image nommé : achtung-inhalt-et-image-vol.png doit être placé dans ce répertoire. Vous pouvez nommer le fichier et le répertoire différemment si vous le souhaitez. Adaptez simplement le code en conséquence.

Comment intégrer la règle de localisation

Voici comment procéder pour équiper votre serveur web NGINX de cette protection spéciale des hotlinks contre le vol d'images.

Temps total : 30 minutes

Faire les préparatifs nécessaires : Créer et télécharger le graphique d'échange

Créez d'abord un graphique que les visiteurs du site web du voleur doivent voir et chargez-le dans le répertoire souhaité sur votre serveur web. Notez l'URL du graphique.

Personnaliser la configuration de NGINX Webserser locations

Sur votre serveur, naviguez maintenant dans le répertoire /etc/nginx/common/ et trouvez la configuration locations intégrée dans le bloc serveur de votre vhost, dans laquelle il existe des règles pour la location définie dans le code ci-dessus. En règle générale, il y aura déjà un bloc de règles existant pour la location mentionnée. Si ce n'est pas le cas, insérez simplement le code ci-dessus comme nouveau bloc de règles dans le bon fichier.
Si le bloc existe déjà, insérez uniquement les règles ci-dessus sans le locations wrap.

Enregistrer et recharger la configuration du serveur web NGINX

Enregistrez ensuite le fichier de configuration avec le bloc locations étendu sur le serveur et testez d'abord la nouvelle configuration via le terminal SSH avec nginx -t
Si le test s'est déroulé sans problème, redémarrez votre NGINX avec la commande service nginx restart.

Testez votre protection Hotlink !

J'ai écrit ici un outil qui vous permet de tester votre configuration de protection des hotlinks. Dans le champ de saisie, entrez l'URL directe d'une image sur votre serveur nginx. Dans le champ de sortie en dessous, votre image d'échange devrait alors s'afficher dans le meilleur des cas. Si l'image de l'URL saisie apparaît, vous devez contrôler à nouveau votre protection hotlink.

Si vous souhaitez effectuer le test plusieurs fois de suite pour la même URL d'image, vous devez effacer le cache de votre navigateur après chaque test et recharger cette page.

Vérifier l'URL de l'image

Vous avez encore des questions ? Alors n'hésitez pas à utiliser la fonction de commentaire en dessous de cet article !

Veuillez partager cet article sur votre page Facebook, via Twitter, Google+ ou toute autre plateforme sociale de votre choix. Vous trouverez les boutons de partage plus bas. Le partage est simple et rapide et cela me ferait très plaisir.

<span class="castledown-font">Saskia Teichmann</span>

Saskia Teichmann

Une développeuse web WordPress full stack d'Allemagne qui aime réaliser de beaux sites web et des projets web ambitieux.

Dans sa vie privée, Saskia aime faire des randonnées avec sa famille dans les montagnes de Tramuntana à Majorque, se promener dans les jardins de Herrenhäuser à Hanovre ou nager dans la mer.

Faire une demande de projetDistribuer du café

9 Commentaires

  1. Kuwe

    Un post super génial ! L'idée est vraiment simple 🙂 je trouve ça super. Je n'ai malheureusement jamais pensé à cela, car cela n'a jamais été un problème pour moi (cela pourrait être dû au contenu ;)).
    Je suis également très étonné de lire quelque chose sur la configuration Nginx sur un site de front-end/design. De plus, WordPress a toujours été adapté à Apache, bien que certains plugins prennent désormais en charge Nginx et génèrent des configs au lieu de créer une htaccess Apache 😉.

    Btw. je trouve aussi tes designs super ! *Les deux pouces levés* 🙂

    Réponse
    • Saskia Lund

      Merci pour ce super feedback !

      Pour être honnête, je pense que nginx est le "meilleur" et le plus rapide des serveurs web en interaction avec WordPress. Il suffit de faire une petite recherche sur le sujet sur Google. 🙂

      Vers le commentaire frontal :
      Je suis certes développeuse frontend, mais comme je me suis justement spécialisée dans WordPress, je pense que le php est incontournable et qu'à un moment donné, les questions relatives au serveur le sont aussi.

      Merci encore !

      Réponse
  2. Frank

    Super article ! Où faut-il placer le code exactement ? Dans le htaccess à la racine du site web ? Ou dans un htaccess séparé dans le répertoire des images ? Merci beaucoup !

    Réponse
    • Saskia Lund

      Salut Frank !

      Si tu utilises un serveur web nginx, le .htaccess n'est pas exploité ; autrement dit, un serveur web nginx ne peut rien faire avec les fichiers .htaccess.

      Les fichiers .htaccess sont utilisés en interaction avec les serveurs web Apache.

      Le code mentionné ci-dessus est généralement utilisé globalement dans le fichier locations.conf d'un serveur web nginx situé dans le répertoire serveur /etc/nginx/common/.
      Il est important de regarder attentivement la configuration de ton propre serveur dans le fichier locations.conf. S'il existe déjà une règle de localisation pour le lieu mentionné ci-dessus, tu dois l'adapter à l'aide du code ci-dessus ; sinon, comme mentionné, il suffit de l'insérer, de l'enregistrer et de lancer la nouvelle configuration de nginx avec la commande terminal nginx -t vérifier brièvement. Si nginx indique dans le terminal que tout va bien, tu peux utiliser la commande service nginx restart redémarrer le serveur web et charger ainsi la nouvelle configuration.

      Bonne chance !

      Réponse
  3. Frank

    Merci et désolé... j'avais oublié Nginx dans le titre. Je cherche pour ma boutique Magento sur un Apache une protection de hotlink qui fonctionne, si possible sans pénalisation de Google.

    Réponse
    • Saskia Lund

      Salut Frank !

      Pour un équivalent Apache, essaie de mettre ce qui suit dans ton fichier .htaccess dans le répertoire root de ton site :

      1ère variante (si tu souhaites interdire de manière générale le hotlinking des fichiers image, mais autoriser le hotlinking de certains domaines (par exemple google.*, bing.*, yahoo.*, yandex.*, duckduckgo.*, etc :)

      RewriteEngine on
      # Supprime la ligne suivante si tu souhaites également bloquer les URL de référence vides :
      RewriteCond %{HTTP_REFERER} !^$
      
      RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?tondomaine.fr [NC]
      RewriteRule \.(jpe?g|png|gif|bmp)$ - [NC,F,L]
      
      # Si tu souhaites afficher une image de remplacement au lieu de l'image hotlinée, remplace la règle ci-dessus par la suivante :
      # RewriteRule \.(jpe?g|png|gif|bmp) http://deinedomain.de/blocked.png [R,L]
      
      # Autorise le hotlinking à partir des sites (domaines) suivants
       RewriteCond %{HTTP_REFERER} !^https?://(www\.)?google\.com/.*$ [NC]

      2. si tu veux bloquer le hotlinking uniquement pour certains référents (domaines malveillants) :

      RewriteEngine on
      RewriteCond %{HTTP_REFERER} ^https?://(.+\N.)?schlingel1\N.com [NC,OR]
      RewriteCond %{HTTP_REFERER} ^https?://(.+\.)?schlingel2\.com [NC,OR]
      RewriteRule \.(jpe?g|png|gif|bmp)$ - [NC,F,L]
      
      # Si tu souhaites afficher une image de remplacement au lieu de l'image hotlinée, remplace la règle ci-dessus par la suivante :
      # RewriteRule \.(jpe?g|png|gif|bmp) http://deinedomain.de/blocked.png [R,L]

      J'espère que cela t'aidera

      Salutations
      Saskia

      Réponse
  4. Muller

    Qui connaît une protection de hotlink pour bmbfotos.com ?
    pour cette page, rien ne fonctionne

    Réponse
    • Saskia Lund

      Bonjour "Müller" !
      Par exemple, quelles sont les images du site web mentionné qui sont liées ?
      On pourra peut-être vous aider.

      Salutations
      Saskia Lund

      Réponse
  5. Ralph

    Peut-on bloquer un seul domaine ? Par réécriture ?

    Réponse

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Envoi