Quel est le moyen le plus fiable pour masquer / usurper le référent en JavaScript?
Normalement, le référent est identifiable par:
- JavaScript
document.referrer
- Les en-têtes de requête, par exemple PHP
$_SERVER['HTTP_REFERER']
J'ai mis en place un Codepad démo qui montre ces propriétés, à des fins de test.
Exigences:
- L'original référent doit effectivement être caché, au moins pour tous les événements de la souris.
- En charge des navigateurs (au moins Chrome et Firefox).
- Autonome, sans aucun contenu externe (plug-ins, les bibliothèques, les pages de redirection, ...).
- Pas d'effets secondaires: les Liens pas être réécrit, les entrées de l'historique doit être préservé.
La solution sera utilisé pour masquer le référent en suivant un lien de <a href="url">
.
Exacte description des cas d'utilisation
Comme décrit dans cette question sur les Webapps, des liens à Google de Recherche sont modifiés lors d'un clic. Par conséquent,
- Google est en mesure de suivre votre comportement de recherche (de la vie privée-- )
- La demande de la page est légèrement en retard.
- De la page liée ne peut pas suivre votre Google à la requête de recherche (de Confidentialité++ )
- Glisser/copier Url de ressembler à
http://google.com/lotsoftrash?url=actualurl
.
Je suis l'élaboration d'un Script (Firefox) /le Contenu du script (le Chrome) (code), qui supprime Google lien-mutilante de l'événement. En conséquence, les points 1, 2 et 4 sont traitées.
Le Point 3 de la demeure.
- Chrome:
<a >
- Firefox:
data-Uri
. J'ai créé une approche plus sophistiquée de mettre en œuvre cette fonctionnalité pour la gauche - et moyen-clics, tout en continuant de l'application du point 4. Cependant, j'ai du mal avec le bouton droit sur la méthode.
- FWIW, Facebook rediriger tous les liens externes à
l.php?the_url_you_want_to_visit
, pour s'assurer qu'aucune information personnelle n'est inclus dans le référent de l'attribut. Cela pourrait être un indice vers "il n'est pas possible". Leurs ingénierie détaillée note pourrait être d'intérêt. - La raison pour laquelle je veux pas utiliser des pages de redirection est 1) cliquez-Droit sur la copie sera de retour le lien de redirection (au lieu du réel). 2) Une page externe est en cause, ce qui réduit la vitesse de navigation. Voir ce script.
- le <a rel= "nofollow" > servir le but? Il empêche efficacement les moteurs de recherche de donner trop d'importance à l'utilisateur de générer des liens tels que ceux sur les forums (que les gens mettent dans leurs signes)
- Je pense qu'il y a une meilleure idée de rompre google code code qui remplace la plaine des liens avec leurs spyredirector
- Qu'est-ce exactement faire de la lutte avec, concernant clique avec le bouton droit? La "ouvrir dans un onglet" menu contextuel de l'entrée? Je suis assez sûr que l'exigence 4 rend cela impossible à résoudre avec un script.
- Sur contextmenu: masquer le référent, mais garder l'URL d'origine sur la copie. Il y a très peu, si ce n'est aucune des sources sur l'Internet pour résoudre ce problème. La créativité est sûrement nécessaire pour résoudre ce problème.
- Il est possible de garder copie: jsfiddle.net/efa5Q (pour une raison quelconque, la copie de la commande utilise une méthode particulière). Cependant, les autres éléments de menu contextuel comme "enregistrer sous...", "envoyer" ou "ajouter un signet" va recevoir les données de l'url.
- excellente question!
- +1 -c'est une longue question. que ce soit pour de bonnes ou ad [sic] il a beaucoup de mérite, et il ya des moments où vous avez juste BESOIN de contourner le référent (j'ai un exemple juste maintenant où se référant via mon lien de produit que l'url est correcte, mais ensuite l'url de base détecte cette redirsct et les enjeux de sa propre redirection de mon nom de domaine -pas ce que je veux. je vais essayer votre solution et voir si cela fonctionne. cependant, l' +1 reste de toute façon que la logique ici a piqué mon esprit!!
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution qui fonctionne dans Chrome et Firefox. J'ai mis en place le code dans un Script, Ne pas suivre moi Google.
Démo (testé dans Firefox 9 et Chrome 17): http://jsfiddle.net/RxHw5/
Référent de la clandestinité pour Webkit (Chrome, ..) et Firefox 37+ (33+*)
Basé sur Webkit navigateurs (google Chrome, Safari) soutien
<a >
spec.Référent de masquage peut être pleinement mises en œuvre en combinant cette méthode avec deux écouteurs d'événement:
mousedown
- Sur un clic, clic milieu, cliquez-droit sur contextmenu, ...keydown
(Tab Tab Tab ... Entrée).Code:
*
rel=noreferrer
est pris en charge dans Firefox depuis 33, mais le soutien est limité à la page des liens. Des référents ont été encore envoyé lorsque l'utilisateur ouvre l'onglet via le menu contextuel. Ce bogue a été corrigé dans Firefox 37 [bug 1031264].Référent de masquage pour les anciennes versions de Firefox
Firefox n'a pas de soutien
jusqu'à la version 33 `[bug 530396] (ou 37, si vous voulez cacher le référent pour les menus contextuels ainsi).
Un data-URI +
<meta http-equiv=refresh>
peut être utilisé pour masquer le référent dans Firefox et IE). La mise en œuvre de cette fonctionnalité est plus compliqué, mais nécessite également deux événements:click
Cliquez sur le clic du milieu, Entréecontextmenu
- Sur clic droit, Tab Tab ... ContextmenuDans Firefox, la
click
événement est déclenché pour chaquemouseup
et appuyant sur la touche Entrée sur un lien (ou contrôle de formulaire). Lecontextmenu
événement est nécessaire, car leclick
événement se déclenche trop tard pour ce cas.Basés sur les données-URIs et en une fraction de seconde délais d'attente:
Lorsque le
click
événement est déclenché, lehref
attribut est temporairement remplacé par un data-URI. L'événement terminé, et le comportement par défaut se produit: l'Ouverture de la data-URI, dépend de latarget
attribut et SHIFT/CTRL modificateurs.Pendant ce temps, le
href
attribut est restauré à son état d'origine.Lorsque le
contextmenu
événement est déclenché, le lien change également pour une fraction de seconde.Open Link in ...
options ouvrir le data-URI.Copy Link location
option fait référence à la restauration, URI originale.Bookmark
option fait référence à la data-URI.Save Link as
points à la data-URI.Code:
Combinaison de ces deux méthodes
Malheureusement, il n'y a pas de façon simple de détecter les fonctionnalités de cette fonctionnalité (laisser seul compte pour les bugs). Ainsi, vous pouvez sélectionner le code approprié basé sur
navigator.userAgent
(c-UA-sniffing), ou d'utiliser l'un de l'enchevêtrement des méthodes de détection de Comment puis-je détecter soutien?.Ne pouvez pas vous créer un système de liaison qui se trouve dans les iframes?
Si vous enchaînez un iframe autour de chaque lien, l'iframe peut agir comme un externe de référence. L'utilisateur, cliquez sur le lien à l'intérieur du cadre, l'ouverture d'une page dont le référent est définie à l'iFrame de l'emplacement, à la place de la page.
tab
afin de naviguer entre les liens devient de plus en plus compliqué ainsi. Enfin, l'impact sur les performances et douceur d'ajouter dynamiquement les images sur tous les points de contrôle est également un sujet de préoccupation.Comme demandé, à l'aide de JavaScript:
Cela va ajouter la balise meta suivante à la section d'en-tête de la page web:
À partir de 2015 c'est la façon dont vous prévenir de l'envoi de l'en-tête Referer.
<meta name=referrer>
semble être un excellent choix si vous voulez toujours de déclarer un référent spécifique de la politique, mais dans le cas contraire (si vous voulez seulement la cible d'un lien spécifique) à l'aide de<a >
est plus approprié, parce que 1) il prend la priorité sur le référent politique, 2) il est spécifique pour le lien et ne pas avoir des effets secondaires sur d'autres liens dans le document et 3) il a une meilleure prise en charge du navigateur.Il y a une croix navigateur solution en Javascript qui supprime le référent, il utilise des Iframes créé dynamiquement, vous pouvez prendre un coup d'oeil à un la preuve de concept ( avertissement: il utilise une bibliothèque JS que j'ai écrit ).
Vous pouvez utiliser la nouvelle Référent de la Politique projet de norme pour éviter que l'en-tête referer est envoyé à la demande de l'origine. Exemple:
Bien que Chrome et Firefox ont déjà mis en œuvre un projet de version de le Référent de la Politique, vous devez être prudent avec elle parce que par exemple google Chrome s'attend à ce
no-referrer
au lieu denone
(et j'ai aussi vunever
quelque part). Je ne connais pas le comportement si vous venez d'ajouter trois balises meta, mais dans le cas où cela ne fonctionne pas, vous pouvez toujours juste mettre en œuvre un petit script qui parcourt tous les trois valeurs et vérifie si la valeur a été vraiment mis après la définition de l'attribut/propriété de la balise meta.Cette balise meta s'applique à toutes les demandes sur la page en cours (ajax, les images, les scripts, les autres ressources...) et la navigation vers une autre page.
C'est plus compliqué qu'il ne paraît à première vue. Regarder le code de ce projet:
https://github.com/knu/noreferrer
Il promet tout ce que vous voulez, mais vous devez le faire sur le lien de la page.
), sauf pour la désactivation du moyen-méthode de la souris, ce qui n'est pas souhaité. J'ai l'habitude de cliquer sur des liens à l'aide de la molette de défilement.
Ce que vous demandez ne peut pas être fait dans Firefox.
La contexte actuel du menu de mise en œuvre passe toujours le document actuel en tant que référent:
Évidemment, userscripts ne sont pas autorisés à modifier le menu contextuel de la mise en œuvre, de sorte que le seul moyen de sortir est une extension de navigateur.
(Ou, ce qui serait une assez mauvaise hack, désactiver le menu contextuel en appelant
preventDefault()
sur lecontextmenu
de l'événement, et d'utiliser votre propre menu contextuel personnalisé)openLinkIn
mise en œuvre peut être trouvé dans utilityOverlay.jsthis.linkURL
.Un très complet (mais court) analyse peut être trouvé à:
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 redirection) et, enfin, proposer une médiation de redirecteur de la page d'approche, comme celle que l'on voit dans la recherche google, liens.
, noreferrer sur Github et iframe de routage. Le "Compromis de convivialité" solution repose sur la création d'un laid URL de redirection - exactement ce que je voulais éviter.
J'ai mis en place un simple mais efficace iframe solution à l'aide de jquery.
https://jsfiddle.net/skibulk/0oebphet/
que si nous soumettre un FORMULAIRE à l'aide de JavaScript, de cette façon il n'y aura pas de référent.
fondamentalement, nous soumettre un formulaire avec désiré ACTION méthode.
document.referrer
dans la console. Vous verrez que le référent est toujours disponible.