79 votes

Empêche le lien d'envoyer le référent à la destination

J'ai une page pour laquelle je ne veux pas que les liens sortants envoient un référent afin que le site de destination ne sache pas d'où ils viennent.

Je suppose que ce n'est pas possible mais je voulais juste m'assurer qu'il n'y avait pas de magie javascript cachée qui pourrait le faire et qui fonctionnerait avec certains (sinon la plupart) des navigateurs.

Peut-être une astucieuse redirection de code d'état HTTP ?

Quelque chose comme ça serait parfait

<a href="example.com" send_referrer="false">link</a>

90voto

Drewmate Points 423

Je cherchais exactement la même chose, et il semble que ce sera une fonctionnalité de HTML5 .

La balise que vous recherchez est rel="noreferrer" .

C'est déjà mis en œuvre dans Webkit (Chrome, etc.) , ainsi que Firefox mais votre kilométrage peut varier.

À partir de 2020, il est pris en charge par tous les principaux navigateurs, à l'exception d'Opera Mini et des anciennes versions d'IE11.

66voto

ssokolow Points 6549

Pour tous ceux qui nous rendront visite en 2015 et au-delà, il existe désormais une solution appropriée qui bénéficie d'un soutien.

Le HTTP Politique de référencement spec vous permet de contrôler l'envoi de référents pour les liens et des sous-ressources (images, scripts, feuilles de style, etc.) et, pour l'instant, il est supporté par sur Firefox, Chrome, Opera et Desktop Safari 11.1.

Edge, IE11, iOS Safari et les versions de bureau de Safari antérieures à 11.1 prennent en charge une version plus ancienne de la spécification avec never , always , origin et default comme options.

Selon la spécification Il est possible de les prendre en charge en spécifiant plusieurs valeurs de politique. Les valeurs non reconnues seront ignorées et la dernière valeur reconnue l'emportera.

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

Aussi, si vous voulez l'appliquer à audio , img , link , script ou video qui nécessitent un crossorigin préférez l'attribut crossorigin="anonymous" dans la mesure du possible, de manière à ce que seul le minimum absolu (les Origin ) seront partagés.

(Vous ne pouvez pas vous débarrasser de la Origin lors de l'utilisation de CORS, car les sites distants doivent savoir quel domaine effectue la demande afin de l'autoriser ou de la refuser).

0 votes

Note : Chrome donne cette erreur : Failed to set referrer policy: The value 'none' is not one of 'always', 'default', 'never', 'no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-crossorigin', or 'unsafe-url'. This document's referrer policy has been left unchanged. La valeur "none" mentionnée semble être incorrecte.

1 votes

@TomPažourek Merci. Je pense que c'est l'ancienne syntaxe. Je ne sais pas comment j'ai fini par l'utiliser.

1 votes

Il existe encore quelques navigateurs qui transmettent le référent avec la métabalise proposée. Existe-t-il un meilleur moyen de ne plus envoyer le référent à TOUT navigateur ? Est-ce que l'utilisation de noopener de l'aide ?

41voto

Wilfred Hughes Points 3507

HTML 5 comprend rel="noreferrer" qui est supporté par tous les principaux navigateurs . Ainsi, pour ces navigateurs, vous pouvez simplement écrire :

<a href="example.com" rel="noreferrer">link</a>

Il existe également une cale pour les autres navigateurs : https://github.com/knu/noreferrer

4 votes

Attention, ce shim dépend de $.browser qui est déprécié.

10voto

zaius Points 2947

Bigmack est sur la bonne voie, mais un changement d'emplacement en javascript envoie toujours un référent dans firefox. L'utilisation d'un rafraîchissement de méta semble résoudre le problème pour moi.

<a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL=&#39;http://google.com/&#39;"></html>'>Link</a>

2 votes

Je crois que c'est ce que google fait pour les liens dans gmail - vous cliquez sur le lien et vous allez sur une page vide de suivi google avec un rafraîchissement méta vers le lien original sur lequel vous avez cliqué.

4voto

J'essayais de comprendre ça aussi.

La solution à laquelle j'ai pensé est d'utiliser une url de données pour cacher la page d'où je viens.

<a href='data:text/html;charset=utf-8, <html><script>window.location = "http://google.ca";</script></html>'>Link</a>

Ce lien ouvre une page qui ne contient que du javascript pour charger une autre page. Dans mes tests, aucun référent n'est donné à la destination finale. Je ne sais pas ce qu'il pourrait envoyer comme référent s'il essayait quand même, peut-être l'url des données ? qui ne donnerait pas d'indication sur votre provenance.

Cela fonctionne dans Chrome. Chrome est mon seul souci pour mon problème actuel mais pour les navigateurs qui n'aiment pas le javascript dans les pages qui sont des urls de données. Vous pouvez probablement essayer un rafraîchissement de méta.

0 votes

Fonctionne dans chrome. Pas dans firefox malheureusement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X