Interdire hotlinking d'image & URL Directe - PHP - Programmation
Marsh Posté le 28-09-2010 à 15:51:39
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...
++
Marsh Posté le 28-09-2010 à 15:53:44
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)
Marsh Posté le 28-09-2010 à 15:55:10
ReplyMarsh Posté le 28-09-2010 à 18:03:39
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.
Marsh Posté le 28-09-2010 à 20:39:20
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
Il veut éviter qu'on lui load l'image directement dans le navigateur. ça n'a rien à voir avec le referer
Marsh Posté le 28-09-2010 à 20:46:46
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.
Marsh Posté le 29-09-2010 à 08:47:13
esox_ch & pataluc: que proposeriez vous comme alternative?
=> des commentaires sur les méthodes proposées par art_dupond (readfile ou fpassthru)
Merci
Marsh Posté le 29-09-2010 à 08:55:54
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 . 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 ? |
ç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
Marsh Posté le 29-09-2010 à 09:11:40
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
Marsh Posté le 29-09-2010 à 09:22:38
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 ) se mangent la mauvaise image?
Marsh Posté le 29-09-2010 à 09:28:06
esox_ch a écrit : Tu l'as fait avec le referer? Donc referer vide ou != de ton site => Mauvaise image? |
j'ai ciblé les relous
RewriteEngine On |
ça a du chialer dans les chaumières
Marsh Posté le 29-09-2010 à 09:47:58
whatboyswant.com
En effet, pas mal Par contre ça demande à ce que tu suives les logs
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?
Marsh Posté le 29-09-2010 à 10:09:03
esox_ch a écrit : whatboyswant.com |
je m'en cogne de myspace, personne ne linke de là bas vers chez moi
Marsh Posté le 29-09-2010 à 10:22:34
Ok
Marsh Posté le 29-09-2010 à 13:21:14
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
|
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.
Marsh Posté le 29-09-2010 à 13:35:51
0x90 a écrit : |
j'suis un sniper
Marsh Posté le 29-09-2010 à 13:40:52
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é
Marsh Posté le 29-09-2010 à 16:39:25
esox_ch a écrit : |
On ne pourrais pas dire d'afficher uniquement si une variable est présente dans la page ?
Marsh Posté le 29-09-2010 à 18:33:17
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
Marsh Posté le 30-09-2010 à 12:34:00
Ca marcherait pas un truc comme ça (juste pris l'exemple de la doc) ?
images/show_image.php
Code : |
et dans index.php
Code :
|
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
Marsh Posté le 30-09-2010 à 12:54:34
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)
Marsh Posté le 30-09-2010 à 14:03:14
ReplyMarsh Posté le 30-09-2010 à 14:08:53
Juste avant la fin du fichier show_image.php?
Marsh Posté le 30-09-2010 à 14:12:58
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...
Marsh Posté le 30-09-2010 à 14:17:13
pataluc a écrit :
|
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
Marsh Posté le 30-09-2010 à 14:21:02
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
Marsh Posté le 30-09-2010 à 14:32:27
paie ton usine à gaz... t'es sur d'en avoir absolument besoin?
Marsh Posté le 30-09-2010 à 14:33:22
ben j'ai bien dit que je ne savais pas si c'était bien
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
Marsh Posté le 30-09-2010 à 14:36:55
black_lord a écrit :
|
tu met le NC sur l'un mais pas sur l'autre ?
RewriteRule \.(gif|jpg|jpeg|png)$ no_leech.jpg [NC] |
Marsh Posté le 30-09-2010 à 14:45:09
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.
Marsh Posté le 30-09-2010 à 14:46:14
Dans la catégorie comment faire exploser la bande passante, la ram et le CPU d'un serveur en même temps
Marsh Posté le 30-09-2010 à 14:48:52
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.
Marsh Posté le 30-09-2010 à 14:53:28
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
Marsh Posté le 30-09-2010 à 14:57:01
Et quand c'est Apache qui l'envoie comme un fichier statique, il doit pas le charger en RAM peut-être ?
Marsh Posté le 30-09-2010 à 15:18:26
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
Marsh Posté le 30-09-2010 à 15:23:04
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.
Marsh Posté le 30-09-2010 à 15:25:07
Ca m'étonnerait beaucoup que ça soit fait au niveau de l'OS Suffi de voir que tu peux paramétrer ça autant dans Apache que dans PHP
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
Marsh Posté le 28-09-2010 à 11:29:18
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)
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.