web-dev-qa-db-fra.com

Supprimer le référent http

Est-ce un moyen de supprimer ou de masquer les informations de référent http dans l'en-tête de la demande? Je veux supprimer les informations de référence http des utilisateurs qui se rendent sur un autre site de mon site à l'aide d'un script, éventuellement en javascript python ou Django

exemple:

Host    slogout.espncricinfo.com
User-Agent  Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0    
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    
Accept-Language en-us,en;q=0.5    
Accept-Encoding gzip, deflate    
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7    
Connection  keep-alive
Referer http://slogout.espncricinfo.com/index.php?page=index&level=login
47
shiva

A partir de 2015, vous empêchez l'envoi de l'en-tête Referer: 

Ajoutez simplement ceci à la section head de la page Web:

 <meta name="referrer" content="no-referrer" />

Cela fonctionne à la fois pour les liens et pour les requêtes Ajax effectuées par le code JavaScript sur la page.

Les autres options meta valides incluent:

<meta name="referrer" content="unsafe-url" />
<meta name="referrer" content="Origin" />
<meta name="referrer" content="no-referrer-when-downgrade" />
<meta name="referrer" content="Origin-when-cross-Origin" />

• Voir si cela fonctionne pour votre navigateur ici: http://caniuse.com/#feat=referrer-policy

• Voir les spécifications ici: http://w3c.github.io/webappsec/specs/referrer-policy/

Notez également que les navigateurs envoient maintenant l'en-tête Origin (avec les demandes CORS et POST, voir ici: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ Origin ) qui inclut le domaine et le port et, pour autant que je sache, ne peut pas être supprimé. Si vous utilisez <meta name="referrer" content="Origin" />, le référent contiendra des informations similaires à celles de l'en-tête Origin, ce qui est déjà utile du point de vue de la confidentialité, puisqu'il masquera la page exacte dans laquelle se trouve l'utilisateur.

Mettre à jour:

Si vous souhaitez supprimer le référent à l'aide de JavaScript uniquement, vous pouvez ajouter dynamiquement la balise méta appropriée juste avant d'effectuer la demande Ajax. Ce JavaScript ajoutera <meta name="referrer" content="no-referrer" /> à la section de tête de la page Web:

var meta = document.createElement('meta');
meta.name = "referrer";
meta.content = "no-referrer";
document.getElementsByTagName('head')[0].appendChild(meta);
92
MarcG

Il existe une solution multi-navigateur en Javascript, elle utilise Iframes créée dynamiquement, vérifiez un preuve de concept (disclaimer: il utilise un peu de JS lib que j'ai codé à cette fin).

10
jpgerek

Si vous souhaitez uniquement masquer l'URL complète et que vous gardez votre nom de domaine exposé, ce petit code Javascript fait le travail.

Votre utilisateur est à example.com/secret_url_we_want_to_hide, votre utilisateur clique sur un lien qui est censé les envoyer à google.com. mais au lieu de <a href="http://google.com">Go to Google</a>, nous utilisons ceci:

a href="http://example.com/redirect.html#http://google.com">Go to Google</a>

/redirect.html est une page HTML contenant les éléments suivants: .__ (Édition: voir la mise à jour!)

<html><head></head><script>
window.location.replace(location.hash.substring(1));
</script></html>

Google.com verra http://example.com/redirect.html dans la balise de référent et ne verra jamais le example.com/secret_url_we_want_to_hide réel.

METTRE À JOUR:

Firefox a un bug avec location.hash, la solution de contournement est la suivante:

<html><head></head><script>
workaround_hash=location.href.split('#').splice(1).join('#');
window.location.replace(workaround_hash);
</script></html>
5
Hello World

Différents mécanismes permettent de le faire, en fonction de la version du navigateur que vous utilisez. Pour tous les navigateurs, si la destination est sur HTTP, vous pouvez "blanchir" l’Origine en redirigeant vers une page HTTPS qui navigue ensuite vers la page cible.

Pour IE, vous pouvez effectuer la navigation en utilisant JavaScript (par exemple, window.open), ce qui supprimera le référant. Vous pouvez aussi utiliser META Refresh, mais cela coûte un peu plus cher. Pour les navigateurs WebKit, voir l’option NoReferrer LINK REL: http://www.webkit.org/blog/907/webkit-nightlies-support-html5-noreferrer-link-relation/

4
EricLaw

Je cherchais une solution similaire, en blanc le référant, mais seulement pour compter les visites uniques d’un site Web référent. Le problème que j'avais était que, si quelqu'un visitait mon site à partir d'un lien particulier, le compteur de visites augmenterait, mais si cette personne actualisait la page, le compteur de visiteurs se levait toujours.

J'ai utilisé google pour visiter plusieurs ressources sur ce sujet et oui, il était très difficile de trouver la réponse tant que personne ne m'a demandé de consulter php.net pour la solution.

J'ai trouvé la solution en utilisant

header('Refresh: 0; url=index.php');

Mais le code ci-dessus n'est pas la solution. La solution réside dans son placement. Voici le code complet:

$ref=@$_SERVER[HTTP_REFERER];
$domain = parse_url($ref, PHP_URL_Host);

If ($domain === "google.com") 
    {
        header('Refresh: 0; url=index.php'); //Resets header info to Host site so that on page refresh, the hit counter does not
    }                                        // increase but increases only when someone visits from google url again

Après le "rafraîchissement", les informations d'en-tête deviennent celles du site hôte. Par conséquent, sur la page, l'actualisation de l'instruction "if" ne sera pas validée et le compteur d'accès n'augmentera pas.

Vous pouvez placer votre compteur de coups à l'intérieur du bloc IF. Vous pouvez également programmer différents paramètres pour enregistrer les hits vierges sur votre site Web et différents paramètres pour vous connecter également à toutes les pages/pages vues.

J'espère que ça aide.....

1
Sumit

Votre hypothèse d'accès à l'en-tête de référent via javascript n'est pas possible. Tout comme l'en-tête User-Agent dans http, référent, etc., n'est pas accessible en javascript. Les valeurs de ces en-têtes sont fournies par le navigateur. Ce que vous pouvez faire est un travail délicat autour de vous si vous en avez besoin.

0
nibin012

Une autre méthode utilise la méthode history.replace () pour masquer la chaîne de requête, par exemple si vous souhaitez remplacer http://example.com/search?q=100 par http://example.com/search, procédez comme suit:

history.replace(null,null,'search')

J'espère que cela aide! : D

0
Jack Chen
<meta name="referrer" content="no-referrer"/>

Si vous mettez le code ci-dessus sur votre page, tous les liens sortants (clics de l'utilisateur) n'enverront pas d'informations sur le parrain

Documentation

0
Jyoti Sandhiya