Was ist der zuverlässigste Weg, den Referrer in JavaScript zu verstecken / zu fälschen?
Normalerweise ist der referrer ist nachvollziehbar durch:
- JavaScript
document.referrer
- Request-Header, z.B. PHP
$_SERVER['HTTP_REFERER']
Ich habe ein Codepad demodas zeigt diese Eigenschaften, für Testzwecke.
Anforderungen:
- Der ursprüngliche referrer sollte effektiv ausgeblendet werden, zumindest für alle Maus-events.
- Cross-browser-Unterstützung (zumindest Chrome und Firefox).
- Stand-alone, ohne externen Inhalte (plugins, Bibliotheken, Weiterleitungen, ...).
- Keine Nebenwirkungen: Links sollten nicht umgeschrieben werden, history-Einträge werden sollten erhalten.
Die Lösung wird verwendet, um hide-referrer, wenn Sie einen link von <a href="url">
.
Genaue Beschreibung des use-case
Wie beschrieben in diese Frage auf Webappslinks bei der Google-Suche werden geändert am klicken. Folglich
- Google ist in der Lage, verfolgen Sie Ihre Suche Verhaltensweisen (Datenschutz-- )
- Die Anforderung der Seite ist etwas verzögert.
- Der verlinkten Seite kann nicht verfolgen Sie Ihre Google-Suche query (Datenschutz++ )
- Gezogen/Kopiert URLs wie
http://google.com/lotsoftrash?url=actualurl
.
Entwickle ich ein Userscript (Firefox) /Content-script (Chrome) (code)was entfernt Google die link-Verstümmelung Veranstaltung. Als Ergebnis, die Punkte 1, 2 und 4 behandelt werden.
Punkt 3 bleibt.
- Chrome:
<a >
- Firefox:
data-URIs
. Habe ich einen anspruchsvollen Ansatz, um diese Funktion zu implementieren, die für Links - und Mitte-Klicks, während immer noch die Durchsetzung von Punkt 4. Allerdings bin ich schwer mit dem rechts-Klick-Methode.
InformationsquelleAutor der Frage Rob W | 2012-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich eine Lösung gefunden, die funktioniert in Chrome und Firefox. Ich habe implementiert, den code in ein Userscript, Nicht-track-me Google.
Demo (getestet in Firefox 9 und Chrome 17): http://jsfiddle.net/RxHw5/
Referrer verstecken für Webkit (Chrome, ..) und Firefox 37+ (33+*)
Webkit-basierte Browser (z.B. Chrome, Safari) Unterstützung
<a >
Spezifikation.Referrer verstecken können vollständig umgesetzt werden durch die Kombination dieser Methode mit zwei Ereignis-Listener:
mousedown
- Auf Klick mit der mittleren Maustaste, mit der rechten Maustaste Kontext-Menü, ...keydown
(Tab Tab Tab ... Enter).Code:
*
rel=noreferrer
unterstützt Firefox seit 33 Jahren, aber die Unterstützung beschränkt sich auf die in-page links. Referrer wurden weiterhin gesendet, wenn der Benutzer geöffnet, die Registerkarte über das Kontextmenü. Dieser Fehler wurde behoben in Firefox 37 [bug 1031264].Referrer verstecken für alte Firefox-Versionen
Firefox nicht unterstützt
bis zur version 33 `[bug 530396] (oder 37, wenn Sie ausblenden möchten, die referrer-für die Kontext-Menüs).
Einer data-URI +
<meta http-equiv=refresh>
können ausgeblendet werden, um den referrer im Firefox (und IE). Die Umsetzung dieser Funktion ist komplizierter, erfordert aber auch zwei Ereignisse:click
- Auf Klick auf der mittleren Maustaste, Entercontextmenu
- Auf der rechten-Maustaste, Tab Tab ... ContextmenuIn Firefox, die
click
- Ereignis wird ausgelöst für jedenmouseup
und betätigen von Enter auf einen link (oder Formular-Steuerelement). Diecontextmenu
Veranstaltung ist erforderlich, da dieclick
event feuert zu spät für diesen Fall.Basierend auf data-URIs und die split-second time-outs:
Wenn die
click
Ereignis ausgelöst wird, wird derhref
Attribut wird vorübergehend ersetzt durch eine data-URI. Die Veranstaltung beendet, und das Verhalten tritt auf: Öffnen des Daten-URI, abhängig von dertarget
Attribut-und SHIFT - /STRG-Modifikatoren.Mittlerweile, die
href
Attribut wird in seinen ursprünglichen Zustand wiederhergestellt.Wenn die
contextmenu
Ereignis ausgelöst wird, wird der link ändert sich auch nur für einen Sekundenbruchteil.Open Link in ...
Optionen, öffnen Sie die data-URI.Copy Link location
option bezieht sich auf das restaurierte, original-URI.Bookmark
option bezieht sich auf die Daten-URI.Save Link as
Punkte, um die Daten-URI.Code:
Die Kombination beider Methoden
Leider gibt es keinen einfachen Weg, um feature-Erkennung diese Funktion (geschweige denn Konto für bugs). So können Sie entweder wählen Sie den entsprechenden code basierend auf
navigator.userAgent
(d.h. UA-sniffing), oder verwenden Sie eine der gewundenen Nachweismethoden von Wie kann ich erkennen, unterstützen?.InformationsquelleAutor der Antwort Rob W
Können nicht erstellen Sie eine Verknüpfung system, das sich innerhalb von iframes?
Wenn Sie wickeln einen iframe um jeden link, iframe können Sie als externes de-beziehen. Die Benutzer klicken auf den link innerhalb des Rahmens, öffnen einer Seite, deren referrer gesetzt wird, um den iFrame-Lage, statt der eigentlichen Seite.
InformationsquelleAutor der Antwort fmsf
Wie gewünscht, per JavaScript:
Dies wird fügen Sie folgenden meta-tag-an-Kopf-Abschnitt der web-Seite:
Von 2015 dies ist, wie Sie verhindern, dass das senden der Referer-header.
InformationsquelleAutor der Antwort MarcG
Es ist ein cross-browser-Lösung in Javascript, die entfernt werden der referrer, es nutzt Iframes dynamisch erstellt, können Sie einen Blick auf eine proof-of-concept ( disclaimer: es verwendet eine kleine JS-Bibliothek, die ich schrieb ).
InformationsquelleAutor der Antwort jpgerek
Könnten Sie die neue Referrer-Richtlinie Norm-Entwurf zu verhindern, dass der referer-header gesendet, um die Anforderung Herkunft. Beispiel:
Obwohl Chrome und Firefox bereits eine draft-version der Referrer-Richtlinien haben, sollten Sie vorsichtig sein, weil es zum Beispiel für Chrome erwartet
no-referrer
stattnone
(und ich habe auch gesehennever
irgendwo). Ich weiß nicht, das Verhalten wenn Sie fügen Sie einfach drei separate meta-tags, aber falls das nicht funktioniert könntest du noch einfach umzusetzen, ein kurzes Skript, welches iteriert über alle drei Werte und prüft, ob der Wert war wirklich festlegen nach dem festlegen der Eigenschaft des meta-Tags.Dieser meta-tag gilt für alle Anfragen, die auf der aktuellen Seite (ajax, Bilder, Skripte, andere Ressourcen,...) und navigation zu einer anderen Seite.
InformationsquelleAutor der Antwort Joel Richard
Dies ist schwieriger als es scheinen mag auf den ersten Blick. Blick in den code von diesem Projekt:
https://github.com/knu/noreferrer
Er verspricht ganz das, was Sie wollen, aber Sie haben es zu tun auf der verlinkenden Seite.
InformationsquelleAutor der Antwort Boldewyn
Was Sie für Fragen erfolgt nicht in Firefox.
Den aktuelle Kontextmenü Umsetzung übergibt immer das aktuelle Dokument als referrer:
Offensichtlich, userscripts sind nicht erlaubt, ändern Sie die Kontextmenü-Implementierung, so dass der einzige Ausweg ist eine browser-Erweiterung.
(Oder, das wäre eine ziemlich schlechte hack, deaktivieren Sie das Kontext-Menü durch den Aufruf
preventDefault()
auf diecontextmenu
Ereignis, und verwenden Sie Ihre eigenen benutzerdefinierten Kontextmenü)InformationsquelleAutor der Antwort user123444555621
Eine sehr umfassende (aber kurze) Analyse finden Sie unter:
http://lincolnloop.com/blog/2012/jun/27/referrer-blocking-hard/
dieser Artikel analysiert die beiden Methoden erklärt, die in anderen Antworten (js-Methode, iframe umleiten) und schließlich schlagen eine Vermittlung redirector-Seite Konzept, wie gesehen in der google-Suche links.
InformationsquelleAutor der Antwort Amir Ali Akbari
Ich habe implementiert eine einfache, aber effektive iframe-Lösung mit jquery.
https://jsfiddle.net/skibulk/0oebphet/
InformationsquelleAutor der Antwort skibulk
was ist, wenn wir ein FORMULAR Absenden mit JavaScript, so gibt es auch keinen referer.
im Grunde sind wir senden ein Formular mit den gewünschten AKTION Methode.
InformationsquelleAutor der Antwort highwingers