2011-02-17 7 views
34

Ho una pagina in cui non desidero che i collegamenti in uscita inviino un referrer in modo che il sito di destinazione non sappia da dove provengono.Interrompi collegamento dall'invio del referrer alla destinazione

Immagino che questo non sia possibile ma voglio solo assicurarmi che non ci siano magie javascript nascoste che potrebbero farlo e che funzionerebbero con alcuni (se non la maggior parte) browser.

Forse un codice di stato HTTP intelligente che reindirizza il kung-fu?

Qualcosa di simile a questo sarebbe perfetto

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

risposta

4

Stavo cercando di capire anche questo.

La soluzione che ho pensato è stata quella di utilizzare un URL di dati per nascondere la pagina effettiva da cui provengo.

<a href='data:text/html;charset=utf-8, <html><script>window.location = "http://google.ca";</script></html>'>Link</a> 

Questo collegamento apre una pagina che contiene solo javascript per caricare una pagina diversa. Nella mia prova nessun referrer è dato alla destinazione finale. Non so cosa potrebbe inviare come referrer se provasse lo stesso, forse l'url di dati? che non darebbe da dove vieni.

Questo funziona in Chrome. Chrome è la mia unica preoccupazione per il mio problema attuale, ma per i browser che non amano i javascript nelle pagine che sono URL di dati. Probabilmente potresti provare un meta refresh.

+0

Lavori in cromo. Purtroppo non in Firefox. – zaius

8

Bigmack è sulla strada giusta, ma un cambio di posizione javascript invia ancora un referrer in firefox. L'utilizzo di un meta refresh sembra risolvere il problema per me.

<a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL=&#39;http://google.com/&#39;"></html>'>Link</a> 
+0

Credo che questo sia ciò che Google fa per i link in gmail: fai clic sul link e vai a una pagina di tracciamento google vuota con un meta aggiornamento al link originale su cui hai fatto clic. – wezell

25

HTML 5 include rel="noreferrer", che è supported in all major browsers. Così, per questi browser, si può semplicemente scrivere:

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

C'è anche uno spessore disponibile per altri browser: https://github.com/knu/noreferrer

+4

L'intestazione di questo shim dipende da $ .browser che è deprecato. –

34

Per chiunque abbia visitato nel 2015 e oltre, ora c'è una soluzione adeguata che ottiene supporto.

Il HTTP Referrer Policy spec consente di controllare referrer di invio per i collegamenti e subresources (immagini, script, fogli di stile, ecc) e, al momento, è supported su Firefox, Chrome e Opera.

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

(E una vecchia versione delle specifiche è supportato da Microsoft Edge e Safari, ma non ho ancora trovato un modo collaudato di lavoro per dar loro da mangiare la vecchia sintassi mentre l'alimentazione tutto il resto la nuova sintassi.)

Inoltre, se si desidera applicare a audio, img, link, script, e video tag riferimento a risorse che richiedono CORS, non dimenticare di impostare anche l'attributo crossorigin="anonymous" su di loro in modo che solo il minimo assoluto (la Origin intestazione) saranno condivisi.

(Non è possibile liberarsi della testata Origin durante l'utilizzo CORS perché i siti remoti hanno bisogno di sapere che cosa dominio sta facendo la richiesta al fine di consentire o negare.)

+0

Nota: Chrome restituisce questo errore: 'Impossibile impostare la politica del referrer: il valore 'none' non è uno di 'always', 'default', 'never', 'no-referrer', 'no-referrer-when-downgrade ',' origine ',' origine-quando-crossorigin 'o' unssafe-url '. La politica di referrer di questo documento è rimasta invariata. Il "nessuno" va menzionato sembra non essere corretto. –

+1

@ TomPažourek Grazie. Penso che sia la vecchia sintassi. Non sono sicuro di come ho finito per usarlo. – ssokolow

+0

Ci sono ancora alcuni browser che passano il referer con il meta tag proposto. C'è un modo migliore per interrompere l'invio del referer a QUALSIASI browser? L'uso di "noopener" sarebbe d'aiuto? – Alex

0

Oltre alle informazioni già fornito. Ulteriori informazioni sull'argomento sono disponibili al seguente indirizzo: https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-no-referrer

Specificamente consente di inviare o non inviare informazioni di riferimento se sono necessarie regole diverse per le richieste di origine o di origine incrociata.

Qualcosa da considerare in base al caso d'uso specifico. Ad esempio, se stai inserendo immagini/css/javascript da siti Web di terze parti, potresti non voler identificare l'URL da cui stai facendo questo e quindi utilizzare l'opzione senza referrer. Considerando che se si sta collegando ad altri siti Web dal proprio sito Web, è possibile che si sappia che si sta inviando loro traffico. Pensa sempre alle implicazioni di questo da entrambe le parti. Se c'è un conflitto in queste due aree, ci sono altre opzioni come l'aggiunta di parametri di tracciamento UTM alla fine degli URL che potrebbero rivelarsi utili per alcune persone. Tutti i dettagli qui: https://www.contradodigital.com/2014/06/03/importance-utm-tracking-parameters-social-media/