Masquer le référent sur le clic

Je souhaite masquer le référent lorsque je clique sur un lien sur mon site. Pour mieux comprendre ce que je veux faire: quand quelqu'un clique sur un lien sur mon site Web, je ne veux pas que le propriétaire d'un autre site Web sache comment le visiteur est venu.

Je m'en fiche si c'est fait par PHP, HTML ou Javascript.

J'ai essayé avec le rafraîchissement HTML, l'emplacement de fenêtre javascript, le popup javascript, la redirection d'en-tête PHP, mais rien n'a fonctionné.

Nous utilisons un script simple que nous avons développé en interne pour un système de tâches interne. Nous ne voulons pas que les informations de référence soient transmises non plus! Lorsque je regarde les autres sites Web que nous gérons, je ne vois aucune information de référence transmise avec la demande lors de l'utilisation du script, mais sans le script que je fais.

 <?php // anonym.to.php // Redirect URLs so the referrer information is dropped. Ideally, this script would be // invoked by prefixing all external links like this: "/anonym.to.php?URL" // If a query string is given, then assume it is a website // and anonymously redirect to it. if ($_SERVER['QUERY_STRING']) { header('Location: '.$_SERVER['QUERY_STRING']); exit(0); } ?> 

Voici un moyen infaillible de le faire. J'utilise ce script dans une application qui, parfois, lie des sites tiers à partir de pages où les URL doivent être privées.

 <?php session_start(); /** Setp 1. Get the query string variable and set it in a session, then remove it from the URL. */ if (isset($_GET['to']) && !isset($_SESSION['to'])) { $_SESSION['to'] = urldecode($_GET['to']); header('Location: http://yoursite.com/path/to/this-script.php');// Must be THIS script exit(); } /** Step 2. The page has now been reloaded, replacing the original referer with what ever this script is called. Make sure the session variable is set and the query string has been removed, then redirect to the intended location. */ if (!isset($_GET['to']) && isset($_SESSION['to'])) { $output = '<!DOCTYPE html> <html> <head> <meta name="robots" content="none"> <title>Referral Mask</title> </head> <body> <h3>Redirecting...</h3> <script>window.location.href="'.$_SESSION['to'].'"</script> <a href="'.$_SESSION['to'].'">Here is your link</a> </body> </html>' . "\n"; unset($_SESSION['to']); echo $output; exit(); } ?> <!DOCTYPE html> <html> <head> <meta name="robots" content="none"> <title>Referral Mask</title> </head> <body> <h1>Referral Mask</h1> <p>This resource is used to change the HTTP Referral header of a link clicked from within our secure pages.</p> </body> </html> 

Ce script utilise PHP et JavaScript pour supprimer de manière fiable le référent original des en-têtes.

À partir de 2015, vous évitez d'envoyer l'en-tête Referer:

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

Ajoutez-le simplement à la section tête de la page Web. Fonctionne à la fois pour les liens et pour les demandes Ajax.

Travailler, pas une solution:

Génère tous ces liens via tinyurl.com ou un service similaire.

Prenez <url> vous souhaitez vous rediriger et encodez-le. Générer une chaîne aléatoire de dire 10-15 caractères (pour assurer sa disponibilité), n'hésitez pas à l'appeler <alias> .

Ensuite, appelez http://tinyurl.com/create.php?alias=<alias>&url=<url>

Eg http://tinyurl.com/create.php?alias=ahdiwabdoubiadasd&url=http%3A%2F%2Fwww.whatismyreferer.com%2F

Maintenant, vous pouvez vérifier que http://tinyurl.com/ahdiwabdoubiadasd mène à http://www.whatismyreferer.com avec le référent déguisée

En plus de la réponse de jimps, j'ai créé une solution .php à un fichier qui fonctionnera avec HTTPS et HTTP. Il utilise deux étapes (et donc il appellera anonym.php deux fois). D'abord une redirection de javascript, en second lieu une redirection de lieu d'en-tête php. J'ai personnellement besoin de cela pour tester les URL affichées dans une zone d'administration. Prendre plaisir!

 <?php // anonym.php if ($_SERVER['QUERY_STRING']) { if (stripos($_SERVER['QUERY_STRING'], 'anonym2=') === FALSE) { echo '<script>document.location.replace("anonym.php?anonym2=' .$_SERVER['QUERY_STRING']. '");</script>'; } else { header('Location: ' . str_replace('anonym2=', '', $_SERVER['QUERY_STRING'])); } exit(); } ?> 

En plus de

En HTML 5, les liens doivent être compatibles avec rel="noreferrer" à cette fin.

Vous pouvez faire passer tous vos liens par une redirection de proxy ou un service de raccourcissement de lien (par exemple, bit.ly ou goo.gl), mais cela peut générer des sourcils chez les utilisateurs.

Vous pouvez également (encore une fois, ne conseillez pas) de remplacer vos hyperliens par ceux qui déclenchent un postback côté serveur et, par programmation, "construire" les en-têtes avant d'envoyer la requête.

Tout à fait un peu trop, à mon avis.

Voici ma tentative d'une solution de recharge à l'aide d'un iframe vierge. Je n'ai pas réussi à fonctionner, mais je le partage au cas où quelqu'un d'autre voulait jouer avec lui. Techniquement, le cadre est d'origine croisée, donc vous ne pouvez pas simplement cliquer sur un lien dans le cadre. Ma pensée était d'utiliser PostMessage pour faire en sorte que le cadre soit lui-même.

https://jsfiddle.net/skibulk/0oebphet/39/

 (function($){ var frame = $('<iframe src="about:blank" style="displayyyy: none !important;">').appendTo('body'); $('a[rel~=noreferrer]').click(function(event){ var win = frame[0].contentWindow; win.$ = $; frame .contents() .find('body') .append(event.target.outerHTML) .append( "<scr\ipt> window.addEventListener('message', function(event){ document.append(event.data); $('a').click(); }); </scr\ipt>" ); win.postMessage('Hi','*'); return false; }); })(jQuery);