Comment puis-je transmettre l'en-tête de référence de mon domaine https aux domaines http?


12

Mon site Web est 100% https. J'ai des liens vers d'autres domaines http. L'en-tête du référent n'est pas défini lors de la liaison d'une page https à une page http. Depuis http://en.wikipedia.org/wiki/HTTP_referrer

Si un site Web est accessible à partir d'une connexion HTTP sécurisée (HTTPS) et qu'un lien pointe vers n'importe où sauf un autre emplacement sécurisé, le champ référent n'est pas envoyé.

Je préférerais que d'autres domaines puissent voir le référent afin qu'ils sachent que le trafic provient de mon domaine. Existe-t-il un moyen de forcer cet en-tête ou existe-t-il une autre solution?

Mise à jour

J'ai fait quelques tests de base en utilisant une redirection:

http page  -- link to http  --> 301 redirect --> http page = referrer intact
https page -- link to https --> 301 redirect --> http page = referrer blank
https page -- link to http  --> 301 redirect --> http page = referrer blank
https page -- link to http  --> 302 redirect --> http page = referrer blank

Le référent est perdu lors de la liaison d'une page https vers une page de redirection http sur mon propre domaine. Il n'y a donc pas de référent sur la redirection.


Le Origindoit être intact, mais peut ne pas correspondre à votre cas d'utilisation.
Pacerier

Réponses:



8

J'ai aussi eu ce même problème. Je résous en ajoutant une balise META comme ci-dessous et cela ne fonctionnera que dans Chrome et Safari.

<meta name="Referrer" content="origin">

6

Malheureusement, vous ne pouvez pas référencer HTTPS vers des sites utilisant HTTP. Vous pouvez cependant faire HTTPS en HTTPS ou HTTP en HTTPS.

LA SOURCE

Les clients NE DEVRAIENT PAS inclure 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é transférée avec un protocole sécurisé.

Une solution de contournement consisterait à utiliser un script de redirection interne qui, plutôt que de diriger la liaison vers le visiteur sur le HTTPS, vous redirigez vers HTTP, puis il redirige.

Par exemple:

<a href="http://www.yours.com/out.php?www.other.com">www.outboundsite.com</a> mais cela n'utiliserait pas le référent d'origine.

Une autre possibilité est d'utiliser des rétroliens plutôt que des référents et, pour autant que je sache, cela fonctionne en HTTPS.


Mes tests ont indiqué que l'utilisation d'une redirection ne fonctionne pas (voir la mise à jour).
casse

Utilisez les trackbacks ou perdez le HTTPS;)
Simon Hayter

1
@bybe, Cette réponse nécessite une modification. Voir serverfault.com/a/520603/87017 et webmasters.stackexchange.com/a/71331/7654
Pacerier

4

J'ai pu configurer un lien d'une page HTTPS vers une page HTTP sur un autre domaine et toujours transmettre l'URL de la première page en tant que référent en utilisant la technique suivante.

Définitions

Page d'origine : page HTTPS où se trouve le lien vers la page de destination hébergée HTTP. Dans cet exemple:https://example1.com/origin.html

Page de destination : page HTTP qui a accès au référent de la page d'origine. Dans cet exemple:http://example2.com/destination.html

Plan de base

Cela a pour effet de faire en sorte que la redirection provienne de la version HTTP de la page d'origine:

  1. Le lien sur la page d'origine HTTPS renvoie à la page actuelle mais ajoute un paramètre de requête pour la page de destination [1]. par exemple:https://example1.com/origin.html?goto=http://example2.com/destination.html

  2. Lorsque le lien est cliqué, le serveur sur example1.com interrompt la demande standard lorsque le paramètre de requête «goto» est présent. Alors:

    • Stocke le paramètre «goto» dans un cookie «goto».
    • Supprime le paramètre et la valeur «goto» de l'URL de la demande actuelle
    • 302 redirige vers cette nouvelle URL nettoyée sur la version HTTP du domaine d'origine ie. http://example1.com/origin.html
  3. Le serveur vérifie chaque demande de cookie «goto» et s'il est présent, il effacera le cookie et affichera une page de redirection très simple. Cette page contient [2]:

    • Un script Javascript window.location.replace () qui redirige vers l'url du cookie goto.
    • Une balise Meta Refresh avec la valeur de l'URL du cookie goto et un délai de quelques secondes.
    • Un lien vers l'url du cookie goto.

Remarques

[1] Cette solution de base est un redirecteur ouvert et une certaine attention devrait être accordée à la protection contre les méchants en utilisant le paramètre de requête goto pour rediriger les UA dans les attaques de phishing.

[2] Tous les navigateurs n'enverront pas le référent lors de la redirection via une redirection JS ou une balise meta refresh. Dans mes tests IE8 et inférieur ne passe pas le référent.

Je ne sais pas si cette technique permettra aux robots des moteurs de recherche de suivre les liens. Ce n'est pas important pour mes besoins.

Si l'UA a désactivé les cookies, cela ne fera que rediriger vers la page d'origine.

Autoriser les connexions HTTP uniquement pour les redirections

Sur mon serveur, j'ai une règle Apache pour appliquer HTTPS quelle que soit la demande:

<VirtualHost *:80>
    ServerName example1.com

    # if not on port 443 then 301 redirect to https while keeping any query string
    RewriteEngine              On
    RewriteCond %{HTTP_HOST}  ^example1\.com$ [NC]
    RewriteCond     %{SERVER_PORT} !443
    RewriteRule     ^(.*)$     https://%{HTTP_HOST}$1 [L,QSA,R=301]

Pour que la technique de redirection ci-dessus fonctionne, j'ai besoin d'un moyen d'autoriser conditionnellement les connexions HTTP. Il existe plusieurs façons de procéder. J'ai décidé qu'un cookie fonctionnerait.

<VirtualHost *:80>
    ServerName example1.com

    # if not on port 443 then 301 redirect to https while keeping any query string
    RewriteEngine              On
    RewriteCond %{HTTP_HOST}  ^example1\.com$ [NC]
    RewriteCond     %{SERVER_PORT} !443
    RewriteCond %{HTTP_COOKIE}  !disable_ssl [NC]
    RewriteRule     ^(.*)$     https://%{HTTP_HOST}$1 [L,QSA,R=301]

Le cookie disable_ssl serait défini à l'étape 2, puis supprimé à l'étape 3.


Ok .... mais cela ne passe pas exactement "l'en- tête du référent ".
Pacerier


0

On dirait que ce que vous voulez n'est pas possible, donc une solution de contournement possible; si le site cible utilise Google Analytics (ou un programme compatible, je crois que Piwik utilise une syntaxe similaire, et d'autres packages de statistiques seraient idiots pour l'ignorer), vous pouvez envoyer les paramètres de suivi, par exemple dans votre lien vers example.com

http://www.example.com/?utm_campaign=spring&utm_medium=referral&utm_source=exampleblog

cela apparaîtra dans leur AG avec les détails, assurez-vous de choisir des valeurs que quiconque d'autre utilisera probablement afin de ne pas les forcer à entrer en conflit / ou de cacher votre trafic derrière quelqu'un d'autre

Google fait un générateur d'url pratique ici http://support.google.com/analytics/answer/1033867?hl=en

Mise à jour - re: étiquette

Sans en savoir plus sur la nature du trafic, je ne peux parler que de manière générale / personnelle ...

l'étiquette sera toujours dans l'œil du spectateur. Sans cela, je pense qu'en GA au moins, cela apparaîtrait comme direct, ou peut-être (aucun ensemble), ce qui fausserait leurs chiffres pour donner l'impression que leur marque était plus grande qu'elle ne l'est. Personnellement, je préférerais une campagne soigneusement choisie afin que je sache d'où vient le trafic.

Vous pouvez également le regarder car, si vous leur envoyez à peine du trafic, ils ne le remarqueront probablement pas, si vous les envoyez beaucoup alors ils ne se plaindront probablement pas! S'ils le font, vous pouvez généralement trouver quelqu'un à qui donner du trafic gratuit!

et si vous êtes très précis, cela ne devrait pas causer de problèmes; campagne comme nom de votre site et source comme la section de votre site peut-être?

http://www.example.com/?utm_campaign=mygreatsite.com&utm_medium=referral&utm_source=specialoffers

Bonne idée! J'avais pensé à cette solution de contournement mais je me demandais s'il y avait des "règles" autour de la mise en œuvre de ma part. Normalement, ces paramètres de requête sont ajoutés par le site Web tiers afin qu'ils puissent suivre leurs campagnes, etc. Cette approche serait-elle considérée comme une mauvaise pratique en aucune façon?
casse
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.