Le référent est passé de HTTPS à HTTP dans certains cas… Comment?

17

En théorie, les navigateurs ne transmettent pas les informations des référents de HTTPS aux sites HTTP. Et d'après mon expérience, cela a toujours été vrai. Mais je viens de trouver une exception, et je veux comprendre pourquoi cela fonctionne pour que je puisse également l'utiliser.

Recherchez «quel est mon référent» sur https://www.google.ca/
ex: https://www.google.ca/search?q=what+is+my+referer

Il y a quelques sites qui montreront un référent. Ils semblent tous "fonctionner" alors qu'ils ne devraient pas. Par exemple, cliquez sur celui www.whatismyreferer.com. Je reçois:

 Your referer:
 https://www.google.ca/

Notez que parfois, rarement, je reçois "pas de référent" comme résultat. Revenez en arrière et cliquez à nouveau sur le lien et cela "fonctionnera" la prochaine fois.

Cela ne devrait pas arriver. www.whatismyreferer.com est un site non HTTPS. L'en-tête du référent ne doit pas être transmis, mais il l'est.

Que se passe-t-il ici, et comment puis-je faire la même chose de mon site HTTPS aux sites HTTP auxquels je crée un lien?

ravisorg
la source
1
Je dois noter que j'utilise Chrome sur Windows, si cela fait une différence (par exemple: si d'autres personnes voient des résultats différents sur différents navigateurs / systèmes d'exploitation)
ravisorg
Ce comportement n'est plus vrai.
Flimm
@ravisorg, cela ne devrait-il pas être affiché sur S / O à la place?
Pacerier
Google renvoie maintenant un lien HTTPS, donc le test n'est plus valide :-(
Silas S. Brown

Réponses:

4

C'est le comportement standard.

https://tools.ietf.org/html/rfc2616#section-15.1.3 dit

Les clients NE DEVRAIENT PAS inclure un champ d'en-tête Referer dans une demande HTTP (non sécurisée) si la page de référence a été transférée avec un protocole sécurisé.

donc si votre client le fait, cela viole la norme.

là encore, google EST la norme, et ils peuvent faire ce qu'ils veulent :-)

johnshen64
la source
1
"Devrait" signifie droit facultatif?
Pacerier
oui, je pense que oui, facultatif.
johnshen64
4
Puisqu'il est facultatif, pourquoi dites-vous qu'il viole la norme?
Pacerier
1
À ce jour, 2616 est obsolète. 7231 La section 5.5.2 dit "Un agent utilisateur NE DOIT PAS envoyer un champ d'en-tête Referer dans une requête HTTP non sécurisée si la page de référence a été reçue avec un protocole sécurisé." Il ne spécifie cependant pas ce que les agents sont censés faire pour les requêtes HTTP sécurisées.
Peter
1

Cela semble être quelque chose que fait le javascript sur la page Google. Je ne le vois pas dans firefox avec noscript activé et arrête de le voir dans Chrome sur Windows si je désactive javascript. Je ne sais pas quoi précisément car je n'ai pas creusé plus profondément que ça.

Etan Reisner
la source
Non, ce n'est pas lié au javascript (j'y ai pensé et je l'ai vérifié avant de le demander). Il semble que ce soit une nouvelle balise <meta> que Chrome suit.
ravisorg
La désactivation de javascript de manière fiable empêche le référent de travailler ici. Je ne sais pas. Peut-être que plus d'une chose est impliquée ici.
Etan Reisner
C'est très intéressant - je vais expérimenter davantage avec ça. Merci pour les commentaires!
ravisorg
0

<meta> Le nom d'attribut de l'étiquette a de nouvelles règles de référent, le référent contrôlant le contenu de l'en-tête HTTP Referer HTTP attaché à toute demande envoyée à partir de ce document.

Pour plus d'informations, veuillez vérifier ici: Politique de parrainage RFC

leozhang2018
la source
C'est la même chose que la réponse déjà acceptée?!
DocRoot
-2

C'est parce que lorsque vous cliquez sur le lien, vous êtes redirigé de https://www.google .... vers http://www.google ... puis vous êtes redirigé vers www.whatismyreferer.com

Et comme vous l'avez dit, entre le site http, le référent est transmis.

Vous pouvez le vérifier avec une extension Firefox

user2299634
la source
2
Êtes-vous en train de deviner ou basez-vous cela sur des faits? Parce que je ne vois pas cela se produire de mon côté. En cliquant sur le lien, vous êtes redirigé vers une redirection HTTPS sur google.ca , puis vers le domaine final. Je ne frappe jamais une URL non https jusqu'à ce que j'atteigne (par exemple) www.whatismyreferer.com. Notez également que le référent indique spécifiquement httpS://www.google.ca , pas http.
ravisorg
Oui, cette réponse semble incorrecte.
ceejayoz
Voici le vidage des en-têtes http: pastebin.com/Y1HJyJ87 Je viens de supprimer les ressources de téléchargement (comme google suggèrent et d'autres trucs ajax) et les données relatives aux cookies. Mais je dois admettre que lorsque j'ai essayé plusieurs fois, Google s'est comporté différemment ... Parfois en utilisant uniquement https, ne permettant donc pas au site de me montrer mon référent. Essayez par vous
user2299634