HTTP Referer

WRInaute discret
Bonjour,

Une question qui me trotte dans la tete depuis un moment.

Pourquoi utilises-t-on la variable serveur HTTP_REFERER pour par exemple bloquer l'affichage d'une image depuis un autre serveur que le sien, alors que cette variable n'est pas fiable a 100% ?

Je veut dire par la qu'il est tout a fait possible pour un visiteur de ne pas renvoyer cette variable avec par exemple la developper toolbar de Firefox.

La variable HTT_REFERER renverrais-t-elle l'adresse IP du serveur qui appel l'image plutot que l'Ip du client visitant la page qui affiche l'image ?
 
WRInaute passionné
Hello,

oui cette variable n'est absolument pas fiable... mais beaucoup de gens ne prêtent pas attention à ce genre de chose.

Tout comme les développeurs qui pensent que l'adresse IP correspond à une seule personne, et qu'une personne n'aura qu'une IP durant sa session. Quoi que au moins pour ce qui est du REFERER il doit être exact dans 95% des cas, ce qui n'est pas du tout le cas pour l'IP, et pourtant beaucoup se basent dessus.
 
WRInaute accro
Antoine.B a dit:
Pourquoi utilises-t-on la variable serveur HTTP_REFERER pour par exemple bloquer l'affichage d'une image depuis un autre serveur que le sien, alors que cette variable n'est pas fiable a 100% ?
Il n'est pas nécessaire que HTTP_REFERER soit fiable à 100 % pour que cette méthode soit efficace.

Supposons que HTTP_REFERER soit correct pour 80 % des visiteurs. Cela veut dire qu'il est possible d'afficher un message disant "Image volée" à 80 % des visiteurs. C'est largement suffisant pour dissuader un site hotlinkant des images pour qu'il abandonne cette technique !

Jean-Luc
 
WRInaute passionné
Le soucis ce sont les 20% d'utilisateurs légitimes qui sont accusés de vol alors que c'est simplement "Norton Internet Security" qui remplace le referer par autre chose.
 
WRInaute accro
Ce n'est pas ainsi que ça fonctionne. La méthode dont parlait Antoine.B consiste à accepter les referrers du même domaine et les referrers cachés. Les referrers refusés sont seulement ceux des autres domaines.

Jean-Luc
 
WRInaute passionné
Justement, j'ai déjà vu des "Firewalls" ou autre jouets du genre qui ne se contentent pas de supprimer l'entête Referer mais le remplacent par un "Blocked by nom_du_soft".

Ayant moi même géré un site de fond d'écran pendant longtemps j'ai utilisé cette technique, mais il reste toujours un pourcentage d'utilisateurs légitime qui sont expulsés par ce genre de méthodes.

Et à moins de blacklister un/des domaine(s) en particulier, il y aura toujours des "faux positifs".
 
WRInaute accro
Le mieux est d'utiliser le blocage des images par htaccess. Beaucoup plus fiable pour empêcher le hotlinking des images d'un site de fond d'écran par exemple.

HTTP_REFERER renvoie seulement l'adresse de provenance, mais elle est facilement modifiable, et certains ne l'ont pas forcément activé.
 
WRInaute accro
webmasterlamogere, On préfère une copie plutôt qu'un affichage externe + utilisation de bande passante, t'es pas d'accord ? Ce qui n'empêche pas de le poursuivre par la suite quand même hein :D
 
WRInaute accro
Exactement. C'est la même chose.

Le but de cette méthode est seulement d'éviter le pompage de bande passante. Il n'est pas d'empêcher les copies illégales d'images. Pour cela, il y a d'autres techniques et aussi des avocats.

Jean-Luc
 
WRInaute discret
Existerait-il une autre variable pouvant indiquer par exemple l'IP du serveur sur laquel l'image s'affiche ?

pour faire par exemple :

Code:
if($_SERVER['MA_VARIABLE']!=$mon_ip_serveur){

// exit, ou inclusion d'un filigrane, etc .

}

header ("Content-type: image/jpeg");

$image = imagecreatetruecolor(200, 200);

///traitement sur l'image

imagejpeg($image);
 
WRInaute discret
Merci pour le lien c'est pas mal mais,

Code:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?monsite.fr [NC]
RewriteCond %{HTTP_REFERER} !^http://(www.)?google. [NC]
RewriteRule (.*).(gif|png|jpg|jpeg)$ /traite_voleur.php?fichier=$1.$2&extension=$2 [L]

Ce baser sur le HTTP_REFERER pour verifier si l'image n'est affichee ni sur google, ni sur mon site, et ensuite prendre les precautions necessaire, c'est quand meme hasardeux !

Imaginons qu'un visiteur se balade sur mon site en ayant desactive les referers, les precautions antivol s'effectuent quand meme.
 
WRInaute occasionnel
Il existe une technique qui consiste à écrire l'url de son image avec un paramètre (technique pourrie pour le référencement j'en conviens) et d'avoir une regle de checksum qui se base par exemple sur le nom de l'image et l'heure courante qu'un site tiers ne saura reproduire.
Ensuite notre serveur ne sert que les images avec checksum correct.

Dans dans les pages générées par mon serveur j'ai un truc du genre :
<img src="/images/nepasvoler.jpg?checksum=1c453ab7">

Et le serveur lorsqu'il doit servir une image le fait par un script (en reecrivant toutes les urls qui commencent par /images/ vers un script php par exemple) qui verifie que le checksum est ok.

Ainsi seules les pages servies par notre serveur peuvent inclure nos images.

Et ce sans utiliser HTTP_REFERER
 
WRInaute passionné
ce script permet de recevoir un mail si le referer n'est pas vide et si il est différent de monsite.fr ou google. la liste des exceptions doit être complétée au fur et a mesure des mails. j'ai modifié pour ajouter images.google.* :
Code:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?monsite\.fr [NC]
RewriteCond %{HTTP_REFERER} !^http://(images\.|www\.)?google\. [NC]
RewriteRule (.*).(gif|png|jpg|jpeg)$ /traite_voleur.php?fichier=$1.$2&extension=$2 [L]
 
WRInaute impliqué
Etrange que personne n'ai pensé aux sessions :/

Bien sur, ca nécessite que l'image soit envoyé à travers un script php mais ca me semblerai moins hasardeux que le referer...
 
WRInaute discret
ltressens a dit:
Il existe une technique qui consiste à écrire l'url de son image avec un paramètre (technique pourrie pour le référencement j'en conviens) et d'avoir une regle de checksum qui se base par exemple sur le nom de l'image et l'heure courante qu'un site tiers ne saura reproduire.
Ensuite notre serveur ne sert que les images avec checksum correct.

Dans dans les pages générées par mon serveur j'ai un truc du genre :
<img src="/images/nepasvoler.jpg?checksum=1c453ab7">

Et le serveur lorsqu'il doit servir une image le fait par un script (en reecrivant toutes les urls qui commencent par /images/ vers un script php par exemple) qui verifie que le checksum est ok.

Ainsi seules les pages servies par notre serveur peuvent inclure nos images.

Et ce sans utiliser HTTP_REFERER


seebz a dit:
Etrange que personne n'ai pensé aux sessions :/

Bien sur, ca nécessite que l'image soit envoyé à travers un script php mais ca me semblerai moins hasardeux que le referer...


Bien vu ! idees interessantes, merci
 
WRInaute passionné
seebz : pas bête. Il suffirait ainsi de simplement tester la présence du cookie de session (ou d'un autre cookie d'ailleurs) ; ce qui me semble suffisant.
Ca peut d'ailleurs simplement se faire via .htaccess je pense.

Mais même chose : certains internautes bloques les cookies, et n'auraient ainsi jamais accès aux images en question.
(et le session "trans_sid", ça pue :p)
 
WRInaute impliqué
Bool a dit:
Mais même chose : certains internautes bloques les cookies, et n'auraient ainsi jamais accès aux images en question.

j'y avais pensé mais j'aurais tendance à penser que la proportion est moins importante que le referer bloqué.
de plus j'image que ces utilisateurs doivent être régulièrement confrontés à des problèmes de navigation (plus que ceux qui ont un firewall bloquant le referer)
 
WRInaute passionné
J'utiliserais bien un mixte des deux en fait : se baser sur le referer, et lorsque celui est faux (j'ai bien dit "faux", pas "absent") vérifier la présence du cookie.

Ainsi peu d'utilisateurs devraient être bloquées, et les robots pourront également indexer le contenu.
 
WRInaute accro
ltressens a dit:
et d'avoir une regle de checksum qui se base par exemple sur le nom de l'image et l'heure courante qu'un site tiers ne saura reproduire.
Ensuite notre serveur ne sert que les images avec checksum correct.
donc les pages en cache dans les SERP n'afficheraient pas les images. Pas glop avec gg, live et y! images. Ca fait perdre des visiteurs
 
Discussions similaires
Haut