Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
617 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Interdire hotlinking d'image & URL Directe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Interdire hotlinking d'image & URL Directe

n°2025618
Yellow-Sky
Posté le 28-09-2010 à 11:29:18  profilanswer
 

Bonjour,
je souhaiterais empêcher le hotlinking de mes images ainsi que l'affichage de lien direct d'une image dans l'explorateur.
 
Une solution proposée pour le hotlinking est l'utilisation d'un .htaccess (URL Rewrite)
 

Code :
  1. RewriteEngine On
  2. RewriteCond %{HTTP_REFERER} !^$
  3. RewriteCond %{HTTP_REFERER} !^http://www.site.be/.*$ [NC]
  4. RewriteCond %{HTTP_REFERER} !^http://www.site.be/.*$ [NC]
  5. ReWriteRule .*\.(gif|GIF|jpg|JPG|bmp|BMP|jpeg|JPEG)$ http://www.site.be/images/email.gif [R,NC]


 
Cela marche bien mais ne fonctionne pas pour l'affichage de lien direct dans l'explorateur, genre: www.site.be/images/img001.jpg
 
Pourriez vous m'aider sur la façon d'arriver à empêcher ce genre de liens.
Je vous remercie.
N.B.: je ne sais pas vraiment dans quelle section mettre cette question.

mood
Publicité
Posté le 28-09-2010 à 11:29:18  profilanswer
 

n°2025693
pataluc
Posté le 28-09-2010 à 15:51:39  profilanswer
 

salut,
 
je ne suis pas sur que tu puisses faire ca. le navigateur a besoin de pouvoir accéder à http://www.site.be/images/img001.jpg pour pouvoir l'afficher dans la page, donc même en checkant le referer ca me parait pas faisable... :spamafote:
 
++

n°2025695
esox_ch
Posté le 28-09-2010 à 15:53:44  profilanswer
 

Idem (sans compter que je trouve ce genre de limitation totalement débile). Mon navigateur par exemple n'envoie pas toujours le referer (pas  envie de dire aux différents sites depuis où j'arrive)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2025696
pataluc
Posté le 28-09-2010 à 15:55:10  profilanswer
 

esox_ch a écrit :

(sans compter que je trouve ce genre de limitation totalement débile)

anéfé.

n°2025744
aideinfo
Posté le 28-09-2010 à 18:03:39  profilanswer
 

C'est possible en bloquant le referer vide, mais problématique lorsque le navigaeur ou le pare-feu supprime le référer. Donc, à éviter.


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
n°2025768
esox_ch
Posté le 28-09-2010 à 20:39:20  profilanswer
 

aideinfo a écrit :

C'est possible en bloquant le referer vide, mais problématique lorsque le navigaeur ou le pare-feu supprime le référer. Donc, à éviter.


Relis la question du monsieur :o
Il veut éviter qu'on lui load l'image directement dans le navigateur. ça n'a rien à voir avec le referer :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2025771
aideinfo
Posté le 28-09-2010 à 20:46:46  profilanswer
 

Si ça a à voir. Quand tu saisis l'URL de l'image dans le navigateur, tu outrepasses l'anti hotlink, car le referer est vide.


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
n°2025783
art_dupond
je suis neuneu... oui oui !!
Posté le 28-09-2010 à 22:00:05  profilanswer
 

afficher l'image via readfile ou fpassthru ?
 

Spoiler :

je ne sais pas si ça pourrait marcher ni si c'est bien...


---------------
oui oui
n°2025823
Yellow-Sky
Posté le 29-09-2010 à 08:47:13  profilanswer
 

esox_ch & pataluc: que proposeriez vous comme alternative?
 
=> des commentaires sur les méthodes proposées par art_dupond (readfile ou fpassthru)
 
Merci

n°2025826
esox_ch
Posté le 29-09-2010 à 08:55:54  profilanswer
 

aideinfo a écrit :

Si ça a à voir. Quand tu saisis l'URL de l'image dans le navigateur, tu outrepasses l'anti hotlink, car le referer est vide.


 
Absolument pas :o. Si tu vas sur un site X.com et après tu saisis l'URL de l'image, ton referer sera pas vide
 

art_dupond a écrit :

afficher l'image via readfile ou fpassthru ?
je ne sais pas si ça pourrait marcher ni si c'est bien...


ça ne marche pas. Ce système est utilisé généralement pour autoriser l'affichage d'un document (p.ex. une image) seulement dans certaines conditions (par exemple, si l'utilisateur est authentifié sur le site). En aucun cas ça ne permet de savoir dans quel cadre l'image est chargée.
 

Yellow-Sky a écrit :

esox_ch & pataluc: que proposeriez vous comme alternative?


ça dépend de ce que tu veux faire. Partant de l'idée que d'empêcher l'utilisateur de saisir l'adresse de l'image dans l'URL est impossible, à toi de nous dire la suite


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
mood
Publicité
Posté le 29-09-2010 à 08:55:54  profilanswer
 

n°2025828
black_lord
Truth speaks from peacefulness
Posté le 29-09-2010 à 09:11:40  profilanswer
 

esox_ch a écrit :

Idem (sans compter que je trouve ce genre de limitation totalement débile).


 
sauf quand des crétins utilisent de gros fichiers dispos sur ton serveur pour faire des backgrounds sur le leur : c'est ta BP qui morfle. Perso j'ai mis en place un petit rewrite qui a du décoller quelques rétines et faire vomir qq bassines... au bout de 3 jours j'avais plus aucun hotlinking


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°2025835
esox_ch
Posté le 29-09-2010 à 09:22:38  profilanswer
 

Tu l'as fait avec le referer? Donc referer vide ou != de ton site => Mauvaise image?
T'as pas peur que les gens (genre moi :D) se mangent la mauvaise image?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2025836
black_lord
Truth speaks from peacefulness
Posté le 29-09-2010 à 09:28:06  profilanswer
 

esox_ch a écrit :

Tu l'as fait avec le referer? Donc referer vide ou != de ton site => Mauvaise image?
T'as pas peur que les gens (genre moi :D) se mangent la mauvaise image?


 
j'ai ciblé les relous :o
 

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^.*(hi5|myspace|xanga|friendster|blogspot|imvu|whatboyswant)\.com/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|GIF|JPG|JPEG|png|PNG)$ no_leech.jpg


 
ça a du chialer dans les chaumières :o


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°2025845
esox_ch
Posté le 29-09-2010 à 09:47:58  profilanswer
 

whatboyswant.com :lol:
En effet, pas mal :D Par contre ça demande à ce que tu suives les logs :D
 
Et aussi, tu gères comment le fait que qqn qui est sur myspace, et veut ensuite venir sur ton site, se mange pas un no_leech.jpg?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2025849
black_lord
Truth speaks from peacefulness
Posté le 29-09-2010 à 10:09:03  profilanswer
 

esox_ch a écrit :

whatboyswant.com :lol:
En effet, pas mal :D Par contre ça demande à ce que tu suives les logs :D
 
Et aussi, tu gères comment le fait que qqn qui est sur myspace, et veut ensuite venir sur ton site, se mange pas un no_leech.jpg?


 
je m'en cogne de myspace, personne ne linke de là bas vers chez moi  [:bakk48]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°2025854
esox_ch
Posté le 29-09-2010 à 10:22:34  profilanswer
 

Ok :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2025914
0x90
Posté le 29-09-2010 à 13:21:14  profilanswer
 

black_lord a écrit :

sauf quand des crétins utilisent de gros fichiers dispos sur ton serveur pour faire des backgrounds sur le leur : c'est ta BP qui morfle. Perso j'ai mis en place un petit rewrite qui a du décoller quelques rétines et faire vomir qq bassines... au bout de 3 jours j'avais plus aucun hotlinking


black_lord a écrit :

j'ai ciblé les relous :o

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^.*(hi5|myspace|xanga|friendster|blogspot|imvu|whatboyswant)\.com/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|GIF|JPG|JPEG|png|PNG)$ no_leech.jpg


ça a du chialer dans les chaumières :o


Là c'est un poil différent comme idée (et vachement mieux d'ailleurs), tu bloques les emmerdeurs uniquement, tu bloques pas tout par défaut.

Message cité 1 fois
Message édité par 0x90 le 29-09-2010 à 13:21:23

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°2025917
black_lord
Truth speaks from peacefulness
Posté le 29-09-2010 à 13:35:51  profilanswer
 

0x90 a écrit :


Là c'est un poil différent comme idée (et vachement mieux d'ailleurs), tu bloques les emmerdeurs uniquement, tu bloques pas tout par défaut.


j'suis un sniper [:franck75]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°2025918
esox_ch
Posté le 29-09-2010 à 13:40:52  profilanswer
 

Oué enfin t'as toujours les soucis que t'as avec toutes les black-list : Faut les garder à jour :/
Mais en effet c'est nettement plus ciblé :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2025966
art_dupond
je suis neuneu... oui oui !!
Posté le 29-09-2010 à 16:39:25  profilanswer
 

esox_ch a écrit :


 
ça ne marche pas. Ce système est utilisé généralement pour autoriser l'affichage d'un document (p.ex. une image) seulement dans certaines conditions (par exemple, si l'utilisateur est authentifié sur le site). En aucun cas ça ne permet de savoir dans quel cadre l'image est chargée.


 
On ne pourrais pas dire d'afficher uniquement si une variable est présente dans la page ?
 


---------------
oui oui
n°2025998
esox_ch
Posté le 29-09-2010 à 18:33:17  profilanswer
 

Non, parce que ça se fait en 2 temps:
- Le code HTML de la page est généré (et là, faut un <img src="..." /> valide)
- Le navigateur va chercher les différentes images et les affiche
 
Il pourrait éventuellement jouer sur le fait que les images seront loadées juste après la page, et limiter ce délai, mais ça veut dire que la 1ere fois qu'il y un lag, tout explose


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2026112
art_dupond
je suis neuneu... oui oui !!
Posté le 30-09-2010 à 12:34:00  profilanswer
 

Ca marcherait pas un truc comme ça (juste pris l'exemple de la doc) ?

 

images/show_image.php

Code :
  1. <?php
  2. if(!isset($_SESSION['ok']))
  3. {
  4.  exit;
  5. }
  6.  
  7. $image = $_GET['image'];
  8. // open the file in a binary mode
  9. $name = './'.$image;
  10. $fp = fopen($name, 'rb');
  11.  
  12. // send the right headers
  13. header("Content-Type: image/png" );
  14. header("Content-Length: " . filesize($name));
  15.  
  16. // dump the picture and stop the script
  17. fpassthru($fp);
  18.  
  19. ?>
 

et dans index.php

Code :
  1. <?php
  2. $_SESSION['ok'] = 1;
  3. ?>
  4.  
  5.  
  6. <img src="./images/show_image.php?image=monimage.jpg" />
 


edit: ah mais non, ça n'empêcherait pas de voir l'image...
re-edit: ah mais si si on unset la variable de session à la fin de show_image.php


Message édité par art_dupond le 30-09-2010 à 12:39:20

---------------
oui oui
n°2026115
esox_ch
Posté le 30-09-2010 à 12:54:34  profilanswer
 

Non non non.
Une fois que tu auras accédé pour la 1ere fois à index.php, tu auras accès autant de fois que tu veux à l'image (même en tapant l'URL dans ton browser)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2026129
art_dupond
je suis neuneu... oui oui !!
Posté le 30-09-2010 à 14:03:14  profilanswer
 

pas si je unset la variable :)


---------------
oui oui
n°2026132
esox_ch
Posté le 30-09-2010 à 14:08:53  profilanswer
 

Juste avant la fin du fichier show_image.php?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2026133
pataluc
Posté le 30-09-2010 à 14:12:58  profilanswer
 

art_dupond a écrit :

pas si je unset la variable :)


en admettant que ca fonctionne, tu ne pourrais plus utiliser cette technique qu'une fois dans ta page du coup...

n°2026134
art_dupond
je suis neuneu... oui oui !!
Posté le 30-09-2010 à 14:17:13  profilanswer
 

pataluc a écrit :


en admettant que ca fonctionne, tu ne pourrais plus utiliser cette technique qu'une fois dans ta page du coup...


remarque judicieuse. Je pars réfléchier :)

 

edit: pit-être via un helper qui crée le tag image et la variable de session qui va avec en fonction du nom de l'image ? faudrait juste pas afficher 2 fois la même image dans la même page...

  


esox_ch > ou même juste après le test d'existence en fait :)


Message édité par art_dupond le 30-09-2010 à 14:24:47

---------------
oui oui
n°2026136
esox_ch
Posté le 30-09-2010 à 14:21:02  profilanswer
 

Il pourrait s'en sortir en utilisant une variable de session par image.
Par contre, même là, il ne pourra pas afficher 2x la même image sur la même page.
 
Et même ... vous voyez le bordel que ça va faire sur le serveur si tout à coup il fout ça sur un site qui à 100'000 hits/sec  [:k-nar]


Message édité par esox_ch le 30-09-2010 à 14:21:10

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2026139
pataluc
Posté le 30-09-2010 à 14:32:27  profilanswer
 

paie ton usine à gaz... t'es sur d'en avoir absolument besoin?

n°2026140
art_dupond
je suis neuneu... oui oui !!
Posté le 30-09-2010 à 14:33:22  profilanswer
 

ben j'ai bien dit que je ne savais pas si c'était bien [:spamafote]  

Spoiler :

apparemment via fread ce serait déjà mieux : http://be2.php.net/manual/en/funct [...] .php#55001


 
Je voulais juste savoir si c'était possible et comme tu disais que non, j'ai test :)


---------------
oui oui
n°2026142
stealth35
Posté le 30-09-2010 à 14:36:55  profilanswer
 

black_lord a écrit :

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^.*(hi5|myspace|xanga|friendster|blogspot|imvu|whatboyswant)\.com/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|GIF|JPG|JPEG|png|PNG)$ no_leech.jpg



 
tu met le NC sur l'un mais pas sur l'autre ?
 

RewriteRule \.(gif|jpg|jpeg|png)$ no_leech.jpg [NC]


 
 

n°2026144
Riokmij
Blink and you're dead
Posté le 30-09-2010 à 14:45:09  profilanswer
 

Une solution possible (mais très laide), c'est de garder la même idée que ton show_image.php, mais de passer en plus un paramètre qui change à chaque fois (un nombre aléatoire, par exemple). Côté serveur, on garde la liste des numéros qui ont été émis, on accepte d'afficher l'image que si le numéro est dans liste, et on le retire immédiatement après. Une url est ainsi à usage unique.
 
Si la même image apparaît plusieurs fois sur une même page, c'est pas un problème, il suffit 2 numéros différents.
 
Par contre, niveau performance, ça risque d'être vraiment atroce, parce qu'une solution du genre empêche complètement le browser d'utiliser son cache.

n°2026145
esox_ch
Posté le 30-09-2010 à 14:46:14  profilanswer
 

Dans la catégorie comment faire exploser la bande passante, la ram et le CPU d'un serveur en même temps  :ouch:


Message édité par esox_ch le 30-09-2010 à 14:46:23

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2026147
Riokmij
Blink and you're dead
Posté le 30-09-2010 à 14:48:52  profilanswer
 

J'ai bien dit que c'était très laid :)
 
Encore que, niveau CPU et RAM, c'est pas si méchant que ça, c'est surtout la BP qui va gonfler.


Message édité par Riokmij le 30-09-2010 à 14:49:35
n°2026148
esox_ch
Posté le 30-09-2010 à 14:53:28  profilanswer
 

Bein écoute à chaque fois que tu fais ton readfile, ton apache va charger le fichier en ram avant de l'envoyer.
Donc au lieu de pouvoir simplement tout passer par apache comme fichier statique, il va continuer a le charger à travers PHP, ce qui va représenter un overhead considérable :bounce:


Message édité par esox_ch le 30-09-2010 à 14:53:40

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2026152
Riokmij
Blink and you're dead
Posté le 30-09-2010 à 14:57:01  profilanswer
 

Et quand c'est Apache qui l'envoie comme un fichier statique, il doit pas le charger en RAM peut-être ? :D

n°2026159
esox_ch
Posté le 30-09-2010 à 15:18:26  profilanswer
 

Si, mais il est optimisé pour le faire avec des mises en cache etc.. Alors que là quand tu le load dans PHP, ça te crée une couche supplémentaire que Apache ne mettra pas en cache.  
Je suis assez sûr que ça te changes pas mal la charge d'un serveur :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2026161
Riokmij
Blink and you're dead
Posté le 30-09-2010 à 15:23:04  profilanswer
 

La mise en cache, c'est fait au niveau du système d'exploitation, Apache ne fait rien du tout lui-même.
 
À moins que la fonction PHP soit particulièrement mal écrite (ce qui est tout à fait possible, PHP n'étant pas vraiment réputé pour la qualité de son code), ça va revenir exactement au même : une série d'appels systèmes "read", puis écriture du buffer dans la socket.

n°2026162
esox_ch
Posté le 30-09-2010 à 15:25:07  profilanswer
 

Ca m'étonnerait beaucoup que ça soit fait au niveau de l'OS :o Suffi de voir que tu peux paramétrer ça autant dans Apache que dans PHP :o
Enfin bon, vu que j'ai pas de bentch sous la main, je peux pas l'affirmer, mais je doute franchement que le fait de faire une suite de readfiles() dans PHP soit aussi rapide et léger que le fait d'y pointer directement dessus avec le browser


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Interdire hotlinking d'image & URL Directe

 

Sujets relatifs
passer dune image a une autreAfficher texte sur une image au passage de la souris
Galerie d'image AS3 / Problème sous Firefox / Mac[URL Rewriting] Empêcher les URL bidons
Problème d'insertion d'image sous LaTeXAfficher une image sous VB
Javascript / Ajax - Remplacer une image par une autreImage au-dessus d'un tableau
URL qui tourne qui tourne qui tourne[SWT] Afficher image en plein ecran
Plus de sujets relatifs à : Interdire hotlinking d'image & URL Directe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR