Normalement, le référent est traçable via:
document.referrer
de JavaScript$_SERVER['HTTP_REFERER']
de PHPJ'ai mis en place un DÉMO DU CODEPAD qui affiche ces propriétés à des fins de test.
La solution sera utilisée pour masquer le référent lorsque vous suivez un lien de <a href="url">
.
Comme décrit dans cette question sur Webapps , les liens de Google Search sont modifiés en un clic. Par conséquent,
http://google.com/lotsoftrash?url=actualurl
.Je développe un script utilisateur (Firefox)/contenu) (Chrome) ( code _), qui supprime l’événement de mutilation de liens de Google. En conséquence, les points 1, 2 et 4 sont traités.
Le point 3 reste.
<a rel="noreferrer">
data-URIs
. J'ai créé une approche sophistiquée pour implémenter cette fonctionnalité pour les clics gauche et moyen, tout en maintenant le point 4. Cependant, je me bats avec la méthode du clic droit.Mes trésors sont un plaisir de jouer dans Chrome et Firefox. Ho a mis en oeuvre son code utilisateur,Non rintracciami Google.
Démo (test sur Firefox 9 et Chrome 17):http://jsfiddle.net/RxHw5/
Navigateur bas sur Webkit (Chrome, Safari) supporto<a rel="noreferrer">
spec .
Il nascondimento dei refererrer può essere completamente implémenter une combinaison des questions/réponses avec votre auditoire:
mousedown
- Al clic, clic central, goût de la souris sur le menu de lecture rapide, ...keydown
(TabTabTab...Enter).Codice:
function hideRefer(e) {
var a = e.target;
// The following line is used to deal with nested elements,
// such as: <a href="."> Stack <em>Overflow</em> </a>.
if (a && a.tagName !== 'A') a = a.parentNode;
if (a && a.tagName === 'A') {
a.rel = 'noreferrer';
}
}
window.addEventListener('mousedown', hideRefer, true);
window.addEventListener('keydown', hideRefer, true);
* rel=noreferrer
est pris en charge dans Firefox à partir de la version 33, ce qui correspond au nombre limite de pages dans la page. Je referenci venivano ancora inviati quand l'utre aprivo est déjà programmé sur le menu de lecture rapide. Questo bug est mis à jour dans Firefox 37[ bug 1031264 ].
Firefox non supportava rel="noreferrer"
fina alla versione 33 `[ bug 530396 ](o 37, se si desidera nascondere il référent anche pour i menu di scelta rapida).
Vous pouvez également utiliser une URI de données + <meta http-equiv=refresh>
par nom de référence dans Firefox (et IE). L'implémentation de questions-réponses est plus compliquée, mais rien ne se passe comme prévu:
click
- Tout clic, en un clic du milieu,Entercontextmenu
- Pour en savoir plus sur la souris,TabTab...ContextmenuDans Firefox, l'évènement click
est en cours de création pour mouseup
e che colpisceEntersu un lien (ou control del modulo). L'evento contextmenu
è obbligatorio, poiché l'evento click
si attiva troppo tardi par question.
Voir les informations sur le délai d'attente avant de quitter:
Quando viene attivato l'evento click
, l'attributo href
viene temporaneamente sostituito avec un URI di dati. L'événement est terminé et a confirmé son comportement: Définition de la date, date de début et de la fin target
et modification du MAJ/CTRL.
Nel frattempo, l'attributo href
viene ripristinato allo stato originale.
Quand il s’agit d’attaquer l’événement contextmenu
, il fait le lien entre cambia et une deuxième fraise.
Open Link in ...
apriranno l'URI dei dati.Copy Link location
fa riferimento all'URI originale ripristinato.Bookmark
fa riferimento all'URI dei dati.Save Link as
punta all'URI dei dati.Codice:
// Create a data-URI, redirection by <meta http-equiv=refresh content="0;url=..">
function doNotTrack(url) {
// As short as possible. " can potentially break the <meta content> attribute,
// # breaks the data-URI. So, escape both characters.
var url = url.replace(/"/g,'%22').replace(/#/g,'%23');
// In case the server does not respond, or if one wants to bookmark the page,
// also include an anchor. Strictly, only <meta ... > is needed.
url = '<title>Redirect</title>'
+ '<a href="' +url+ '" style="color:blue">' +url+ '</a>'
+ '<meta http-equiv=refresh content="0;url=' +url+ '">';
return 'data:text/html,' + url;
}
function hideRefer(e) {
var a = e.target;
if (a && a.tagName !== 'A') a = a.parentNode;
if (a && a.tagName === 'A') {
if (e.type == 'contextmenu' || e.button < 2) {
var realHref = a.href; // Remember original URI
// Replaces href attribute with data-URI
a.href = doNotTrack(a.href);
// Restore the URI, as soon as possible
setTimeout(function() {a.href = realHref;}, 4);
}
}
}
document.addEventListener('click', hideRefer, true);
document.addEventListener('contextmenu', hideRefer, true);
Cliquez sur le lien suivant pour afficher le modèle. Cliquez sur le lien suivant pour afficher le modèle. Quindi puoi selezionare le code pertinent bas navigator.userAgent
(cioè UA-reniflant), en utilisant des méthodes de travail complétées Venez-vous en savoir plus? .
Ne pouvez-vous pas créer un système de liaison qui réside dans les iframes?
Si vous enroulez un iframe autour de chaque lien, l’iframe peut servir de référence externe. L'utilisateur clique sur le lien à l'intérieur du cadre, ouvrant une page dont le référent est défini sur l'emplacement de l'iFrame au lieu de la page réelle.
Comme demandé, en utilisant JavaScript:
var meta = document.createElement('meta');
meta.name = "referrer";
meta.content = "no-referrer";
document.getElementsByTagName('head')[0].appendChild(meta);
Cela ajoutera la balise méta suivante à la section head de la page Web:
<meta name="referrer" content="no-referrer" />
À partir de 2015 , voici comment vous empêchez l'envoi de l'en-tête Referer.
Il existe une solution multi-navigateur en Javascript qui supprime le référent, elle utilise des iframes créés dynamiquement, vous pouvez jeter un oeil à un preuve de concept (disclaimer: il utilise un peu de la bibliothèque JS que j'ai écrite).
Vous pouvez utiliser le nouveau projet de norme Politique de renvoi pour éviter que l’en-tête du référent ne soit envoyé à la demande Origine. Exemple:
<meta name="referrer" content="none">
Bien que Chrome et Firefox aient déjà implémenté une version préliminaire de la stratégie de référencement, vous devez être prudent car par exemple, Chrome attend no-referrer
au lieu de none
(et j'ai également vu never
quelque part). Je ne connais pas le comportement si vous ajoutez seulement trois balises méta distinctes, mais si cela ne fonctionne pas, vous pouvez toujours mettre en œuvre un court script qui itère sur les trois valeurs et vérifie si la valeur a été définie après l'attribut/propriété de la balise meta.
Cette balise META s’applique à toutes les demandes de la page actuelle (ajax, images, scripts, autres ressources, etc.) et à la navigation vers une autre page.
Ce que vous demandez ne peut pas être fait dans Firefox.
L'implémentation du menu contextuel current passe toujours le document actuel en tant que référent:
// Open linked-to URL in a new window.
openLink: function () {
var doc = this.target.ownerDocument;
urlSecurityCheck(this.linkURL, doc.nodePrincipal);
openLinkIn(this.linkURL, "window", {
charset: doc.characterSet,
referrerURI: doc.documentURIObject // <----------------
});
},
// Open linked-to URL in a new tab.
openLinkInTab: function () {
var doc = this.target.ownerDocument;
urlSecurityCheck(this.linkURL, doc.nodePrincipal);
openLinkIn(this.linkURL, "tab", {
charset: doc.characterSet,
referrerURI: doc.documentURIObject // <----------------
});
},
// open URL in current tab
openLinkInCurrent: function () {
var doc = this.target.ownerDocument;
urlSecurityCheck(this.linkURL, doc.nodePrincipal);
openLinkIn(this.linkURL, "current", {
charset: doc.characterSet,
referrerURI: doc.documentURIObject // <----------------
});
},
De toute évidence, les scripts utilisateur ne sont pas autorisés à modifier l’implémentation du menu contextuel. Le seul moyen de sortir est donc une extension de navigateur.
(Ou, ce qui constituerait un hack assez pauvre, désactivez le menu contextuel en appelant preventDefault()
dans l'événement contextmenu
et utilisez votre propre menu contextuel personnalisé)
C'est plus compliqué qu'il n'y paraît à première vue. Regardez le code de ce projet:
https://github.com/knu/noreferrer
Il promet tout à fait ce que vous voulez, mais vous devez le faire sur la page de liens.
Une analyse très complète (mais brève) peut être trouvée à:
http://lincolnloop.com/blog/2012/jun/27/referrer-blocking-hard/
cet article analyse les deux méthodes expliquées dans d'autres réponses (méthode js, iframe redirecting) et suggère enfin une approche de page de redirection par médiateur, comme celle présentée dans les liens de recherche Google.
J'ai implémenté une solution iframe simple mais efficace en utilisant jquery.
https://jsfiddle.net/skibulk/0oebphet/
(function($){
var f = $('<iframe src="about:blank" style="display: none !important;">').appendTo('body');
$('a[rel~=noreferrer]').click(function(event){
var a = $(event.target.outerHTML);
a.appendTo(f.contents().find('body'));
a[0].click();
return false;
});
})(jQuery);