2010-12-07 41 views
3

J'ai un fichier qui est lié à d'autres sites secondaires.Comment identifier de façon fiable un site Web

Le fichier: http://site.com/file.img

site Un lien vers elle <img src="http://site.com/file.img"></img>

site B un lien vers elle <img src="http://site.com/file.img"></img>

Je dois identifier de manière fiable lequel de ces sites a accédé au fichier, mais je sais que $_SERVER['HTTP_REFERER'] peut être spoofé. De quelles autres façons dois-je confirmer de façon fiable le site du demandeur? Par IP, demandez-leur d'enregistrer une adresse IP? pas certain. configurer une clé API? Quelles options sont là?

+1

L'obtention de l'adresse IP du serveur ne fonctionne pas car l'image est exposée au client. – GWW

+0

Nous avons besoin de plus d'informations ici - dans quel contexte ces images sont-elles utilisées? Le site distant est-il toujours autorisé à les afficher? La réponse va de "signature de clé privée" à "pas possible" selon le contexte. –

+0

@Chris, S'il vous plaît ajouter le vôtre comme une réponse afin que nous puissions discuter là-bas. – samquo

Répondre

5

Si un site est seulement reliant à un fichier, lui-même « site web » ne sera jamais réellement accès à votre image. Au lieu de cela, le client qui consulte le site fera une demande pour l'image. En tant que tel, vous dépendez des informations envoyées par le client, qui sont totalement hors de votre contrôle et pas du tout fiables. Si vous avez la possibilité de définir un cookie unique sur le client, vous pourrez peut-être l'utiliser d'une certaine manière pour une identification étendue, mais même cela ne sera pas fiable.

Il n'y a pas de solution fiable à 100%.

+2

+1.Le problème avec ce schéma est sa dépendance à la présence du champ optionnel HTTP referrer. Si votre client ne fournit pas cette information, vous ne pouvez pas faire grand-chose d'autre que de jouer à des jeux clients stupides (par exemple, http://yro.slashdot.org/story/10/05/19/1425240/76-Web-Users -Affecté par le navigateur-Historique-Voler). – MrGomez

+0

@MrGomez, Wow Je me demande combien de développeurs et de propriétaires de sites jouent à ces jeux stupides. Pas quelque chose qui devrait être autorisé. – samquo

2

Obtenir le référent est le meilleur que vous pouvez faire sans entrer dans un territoire compliqué.

Si cela ne vous dérange pas compliqué, alors lisez la suite: configurer votre serveur Web pour servir file.imguniquement sur le site A et le site web B, puis exigent que Site A et Site B mis en place une configuration proxy sur leur extrémité qui récupérera file.img au nom de leurs visiteurs.

Exemple:

Un visiteur sur le site A charge une page qui contient une balise d'image comme <img src="http://websiteA.com/file.img"/> (note de référence sur le site Web A plutôt que votre site). Le client demande file.img de WebsiteA.com en conséquence. Le site Web A est configuré pour les demandes de proxy pour le chemin /file.img vers votre serveur, http://site.com/file.img. Votre site vérifie que c'est bien le site Web A qui demande l'image et qui sert ensuite le proxy du site Web. Le site Web A le sert ensuite au visiteur. Fondamentalement, cela fait mal pour les sites Web A et B, vous donne un coup de performance, et nécessite également une configuration supplémentaire de votre part. Mais j'imagine que cela satisferait votre exigence.