web-dev-qa-db-fra.com

Empêcher le lien d'envoyer le référent vers la destination

J'ai une page où 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 veux 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 un code d'état HTTP intelligent redirigeant le kung-fu?

Quelque chose comme ça serait parfait

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

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".

Il est déjà implémenté dans Webkit (Chrome, etc.) , ainsi que Firefox , mais votre kilométrage peut varier.

69
Drewmate

Pour tous ceux qui visitent en 2015 et au-delà, il existe maintenant une solution appropriée qui gagne du soutien.

La spécification HTTP Referrer Policy vous permet de contrôler l'envoi de référents pour les liens et les sous-ressources (images, scripts, feuilles de style, etc.) et, pour le moment, c'est pris en charge 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 ancienne version de la spécification avec never, always, Origin et default comme options.

Selon la spécification , ceux-ci peuvent être pris en charge en spécifiant plusieurs valeurs de stratégie. Les non reconnus seront ignorés et le dernier reconnu gagnera.

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

De plus, si vous souhaitez l'appliquer aux audio, img, link, script ou video balises qui nécessitent un crossorigin attribut, préférez crossorigin="anonymous" lorsque cela est possible, afin que seul le minimum absolu (l'en-tête Origin) soit partagé.

(Vous ne pouvez pas vous débarrasser de l'en-tête Origin lorsque vous utilisez CORS car les sites distants doivent savoir quel domaine fait la demande afin de l'autoriser ou de la refuser.)

46
ssokolow

HTML 5 comprend rel="noreferrer", ce qui est pris en charge dans tous les principaux navigateurs . Donc pour ces navigateurs, vous pouvez simplement écrire:

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

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

31
Wilfred Hughes

Bigmack est sur la bonne voie, mais un changement d'emplacement javascript envoie toujours un référent dans Firefox. L'utilisation d'un méta-rafraîchissement 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>
9
zaius

J'essayais de comprendre cela aussi.

La solution à laquelle j'ai pensé était d'utiliser une URL de données pour masquer la page réelle dont 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. Lors de mes tests, aucun référent n'est donné à la destination finale. Je ne sais pas ce qu'il pourrait envoyer en tant que référent s'il essayait de toute façon, peut-être l'url des données? qui ne trahirait pas d'où tu viens.

Cela fonctionne dans Chrome. Chrome est ma seule préoccupation pour mon problème actuel, mais pour les navigateurs qui n'aiment pas le javascript dans les pages qui sont des URL de données. Vous pourriez probablement essayer une méta-actualisation.

4
Bigmack

En plus des informations déjà fournies. Beaucoup d'informations sur le sujet ici: https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-no-referrer

Vous permettant spécifiquement d'envoyer ou de ne pas envoyer d'informations de référence si vous avez besoin de règles différentes pour les demandes de même origine ou d'origine croisée.

Quelque chose à considérer en fonction de votre cas d'utilisation spécifique. Par exemple, si vous extrayez des images/css/javascript à partir de sites Web tiers, vous pouvez ne pas identifier l'URL à partir de laquelle vous effectuez cette opération et, par conséquent, utiliser l'option sans référence. Alors que si vous vous connectez à d'autres sites Web à partir de votre propre site Web, vous voudrez peut-être qu'ils sachent que vous leur envoyez du trafic. Réfléchissez toujours aux implications de cela des deux côtés. S'il y a un conflit dans ces deux domaines, il existe d'autres options telles que l'ajout de paramètres de suivi UTM à la fin des URL qui peuvent être utiles pour certaines personnes. Tous les détails ici: https://www.contradodigital.com/2014/06/03/importance-utm-tracking-parameters-social-media/

1
Michael Cropper