2009-09-07 4 views
5

Imaginez deux pages Web, toutes deux visualisées à l'aide de https. Ils résident sur différents domaines.http_referer perdu à l'aide de https

Comment puis-je (raisonnablement) m'assurer que quelqu'un arrivant sur ma page est venu via un lien hypertexte qui réside sur un autre domaine (spécifique)? Je veux seulement autoriser le trafic de ce domaine. Toute idée sur la meilleure façon d'y parvenir serait appréciée.

J'ai essayé de regarder le HTTP_REFERER, mais apparemment il n'est pas envoyé dans ce cas. Je sais que le RFC HTTP spécifie ne pas envoyer les informations de provenance de https -> http, mais cela s'applique également à https -> https à travers les domaines ou certificats ssl?

Mon domaine s'exécute sur ASP.NET si cela est important. Je n'ai aucun contrôle sur le domaine source.

Merci.

+4

Referer est facilement usurpé, je ne le recommande pas –

+3

Je sais que le référent peut être usurpé. Je comprends que je ne peux pas garder tout le monde dehors. J'ai besoin d'une solution qui fonctionnera assez bien pour éviter la curiosité désinvolte et empêcher les gens de mettre en signet le site cible, les forçant à arriver via le site sur lequel je n'ai aucun contrôle. – BlueRonin

Répondre

5

Si oui ou non les RFCs permettent l'envoi de HTTP_REFERER ou non, vous constaterez que beaucoup de clients Web et/ou des mandataires ou d'autres portes d'entrée liées à la confidentialité entre celui-ci et le serveur va supprimer ou usurper l'HTTP_REFERER dans l'en-tête, rendant la plupart des schémas "d'authentification" basés sur http_referer partiellement fonctionnels.

Si vous avez une collaboration avec le dépositaire du premier serveur https, vous pouvez accepter de transmettre un code de tri temporel + something_else basé sur le tri dans les requêtes adressées à votre serveur. En vérifiant le hashcode de votre côté, vous savez que votre visiteur https vient de l'autre serveur [très récemment].

6

Elaborating sur la réponse de mjv: vous devriez mettre HMAC (RFC 2104) dans l'URL. Avoir un secret partagé entre les deux serveurs et demander au serveur d'origine de générer des liens de la forme/timestamp/hmac/path. Le hmac doit être vérifié à partir de hmac (clé, horodatage + chemin), de sorte que différentes images génèrent des hmacs différents. Le serveur cible peut alors décider si l'horodatage est suffisamment jeune pour provenir d'une redirection.

Vous pouvez en outre restreindre cela en mettant l'adresse IP du client dans le hmac, en exigeant que le même client qui a reçu l'URL le résolve également. Cela peut être sujet à des erreurs, en présence de proxys HTTP qui traitent uniquement http et non https ou vice versa.

0

Si vous n'avez aucun contrôle sur le site de référence, vous n'avez pas de chance.

Reniflez le référant si vous le pouvez, et s'il n'est pas présent, lancez une page d'atterrissage qui dit «cliquez ici allez sur le site A pour que vous puissiez revenir ici».

De plus, passez du temps à travailler sur une méthode plus robuste d'accès à votre site «sécurisé».

+0

C'est mon problème, le fait que le référent ne soit pas présent quand quelqu'un arrive du site A. J'ai besoin de cette erreur "aller au site A" pour apparaître pour tout le monde. En ce qui concerne l'accès au site, le site A dirige les gens vers ma page de connexion. Ils ne peuvent pas faire grand-chose sans un login autre que d'admirer le travail de mes graphistes. – BlueRonin