Savoir avec certitude quel domaine appelle une image hotlinkée ?


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Savoir avec certitude quel domaine appelle une image hotlink

Message le Mar Jan 20, 2009 13:48

Bonjour à tous.

J'aimerais donner la possibilité à certains domaines (ou sous-domaines) d'afficher une image dynamique. Est-ce quelqu'un aurait une idée de la façon la plus simple de vérifier (en php) que le l'URL qui appelle cette image distante fait partie d'une liste de noms de domaines "identifiés" et autorisés.

Je voudrais éviter qu'un tiers puisse se faire passer pour un des domaines en question: l'image ne devrait donc pouvoir être affichée que sur les domaines précisément autorisés, voire même sur une "URL type".

Exemple: l'image peut s'afficher sur -http://www.example.com/tests/* ou sur -http://site2.com/log/check.html qui sont des urls autorisés (stockés en db), mais pas sur *.site3.net/* qui ne l'est pas.

Je ne sais pas si c'est très clair ? :)

D'avance merci !


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Message le Mar Jan 20, 2009 13:56

Tu peux faire ça directement via le htaccess il me semble, en spécifiant de manière explicite les sites qui doivent pouvoir hotlinker tes images. J'ai un exemple de ça (mais pas sous la main là) que je peux te coller ici tantôt (je m'en sers pour permettre aux agrégateurs d'afficher les images dans les flux rss).

Edit : si ton image est dans un dossier à elle tu peux donc utiliser ce genre de choses : http://blogtoolbox.fr/empecher-le-hotlinking-dimages/
Dernière édition par UsagiYojimbo le Mar Jan 20, 2009 14:02, édité 1 fois.


LiFi
WRInaute impliqué
WRInaute impliqué
 
Messages: 609
Inscription: 14 Juil 2008

Message le Mar Jan 20, 2009 13:59

Est-ce que la variable d'environnement $_SERVER['HTTP_REFERER'] ne suffit pas ?
Même si elle peut etre falsifiée, ça stoppera l'immense majorité des cas, non?

Tu fais
Code: Tout sélectionner
if (strpos($_SERVER['HTTP_REFERER'], 'tondomaine') === FALSE) {
C'est bon, renvoie l'image
} else {
Renvoie une image faisant de la pub pour ton site, ou pas d'image du tout.
}


Note les trois === parce que strpos peut renvoyer 0 si la chaine recherchée est trouvée dès le début de la chaine.


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Message le Mar Jan 20, 2009 14:13

Merci pour ces premières pistes ;)

En fait les deux contraintes principales sont:

1. uniquement php: les domaines autorisés sont stockés en db (gestion des accès, voire des abonnements).

2. ne doit pas être falsifiable (ok, c'est toujours possible, mais disons que seul un gros félé doit pouvoir y arriver ;) ).


Je vais néanmoins voir dans quelle mesure on peut falsifier $_SERVER['HTTP_REFERER']: si ça se trouve, le niveau de sécurité sera suffisant.

Est-ce que, pour améliorer la sécurité du principe, il serait envisageable de récupérer l'ip du serveur qui héberge le site "demandeur" de l'image ?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Message le Mar Jan 20, 2009 14:15

$_SERVER["SERVER_ADDR"] ?


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Mar Jan 20, 2009 14:27

euh çà c'est pour récupérer son ip de serveur


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Message le Mar Jan 20, 2009 14:30

Ah oui bien vu, ça serait donc avec REMOTE_ADDR dans ce cas, non ?


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Message le Mar Jan 20, 2009 14:35

Ca c'est l'IP du client ;)

Ce que je cherche, c'est l'IP du serveur site par lequel l'image est demandée ;)


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Message le Mar Jan 20, 2009 14:40



LiFi
WRInaute impliqué
WRInaute impliqué
 
Messages: 609
Inscription: 14 Juil 2008

Message le Mar Jan 20, 2009 14:41

Ca a mon avis tu ne peux pas car c'est le client qui demande l'image, donc la demande vient de l'ip du client. Et le http_referrer n'est qu'une variable transmise avec la demande de l'image, c'est pour ca qu'elle peut etre falsifiée, mais franchement ca sera tellement minime que ca ne vaut pas le coup d'aller plus loin dans la recherche de solutions, a moins bien sur que ton public soit des geeks, dans ce cas le minime peut se transformer en presque moitié, surtout si des geeks publient sur leur blog la façon de contourner ta protection.


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Mar Jan 20, 2009 14:46

à voir du coté de javascript à ce moment là car google avec son api maps filtre parfaitement par domaine ...


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Message le Mar Jan 20, 2009 15:10

julienr, comment ferais-tu, toi, dans ce cas, en JS par exemple (je n'y connais RIEN en js).

Voici la démarche, un peu plus clairement.

1. un client (un site web, autorisé) appelle un marqueur (ce sera plus simple de le nommer comme ça), incluant une variable (disons qu'il faut que je sache que $foo=bar dans sa demande.

2. je dois pouvoir récupérer l'info suivante:

- quel est le site demandeur ?
- quelle est la valeur de $foo

3. sur base de ces infos, je fais un petit tour dans ma db, et je renvoie:

- soit une image indiquant qu'il n'est pas autorisé
- soit une image dépendante de ce que je trouve dans la db pour $foo (si foo est positif j'envoie une image verte, si foo est négatif j'envoie une image rouge).


Peu importe quel IP client demande l'image, tant que c'est au sein d'une page d'un site autorisé.


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Mar Jan 20, 2009 15:36

ne peux-tu pas passer par un script sur le site distant qui serve de passerelle?
Après tu peux contrôler a 100% l'origine car c'est le serveur de ce site.


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Message le Mar Jan 20, 2009 15:48

Pas vraiment: je n'ai pas le contrôle du site distant.
C'est supposé par exemple être ton site à toi, si tu souhaitais faire appel à ce service. Je voudrais que tu n'aies qu'à coller un truc du genre dans ton code:

Code: Tout sélectionner
<img src="example.com/get/'.$foo.'.gif" />


ou une alternative JS à ce genre de méthode ;)


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Mar Jan 20, 2009 16:10

il ne reste que le referer alors.
tu ne peux pas être sur qu'il n'a pas été changé.

Savoir avec certitude quel domaine appelle une image hotlinkée ?

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Goggles



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités