Giocare con l'intestazione del referer

13

Ci sono 2 siti:

http://www.site1.com
http://www.site2.com

http://www.site1.com contiene link a http://www.site2.com as

<a href="http://www.site2.com/">link<a/>

Quando l'utente fa clic sul link da http://www.site1.com browser invia l'intestazione Referrer a http://www.site2.com . Basato sull'intestazione Referrer http://www.site2.com rende alcuni processi.

Mi chiedo se posso falsificare / cambiare (magari con javascript, PHP, ...) l'intestazione Referrer o non inviarlo affatto?

    
posta torayeff 12.01.2013 - 09:12
fonte

6 risposte

27

Esistono due situazioni in cui si desidera controllare l'intestazione Referer . A proposito, Referer è un'ortografia errata della parola "referrer".

Se vuoi controllare il tuo browser personale per non passare il Referer a site2.com , puoi farlo con molte estensioni del browser:

L'altra situazione è dove sei webmaster e vuoi che gli utenti del tuo sito (site1.com) non inviino Referer ad altri siti collegati sul tuo sito. Puoi farlo in diversi modi:

  • Utilizza SSL / TLS (https) sul tuo sito e una funzione di sicurezza del browser non deve passare Referer quando utilizza SSL / TLS.
  • Utilizza l'attributorel="noreferrer" HTML5%. È supportato da tutti i principali browser.
  • Utilizza un URL dati ("dati:") per nascondere la pagina effettiva da cui proviene il collegamento: <a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL=&#39;http://site2.com/&#39;"></html>'>Link text</a> .
  • Nascondi Referer reindirizzando attraverso una pagina intermedia. Questo tipo di reindirizzamento viene spesso utilizzato per impedire ai collegamenti potenzialmente dannosi di ottenere informazioni utilizzando Referer , ad esempio un ID di sessione nella stringa di query. Molti siti Web di grandi dimensioni utilizzano il reindirizzamento dei collegamenti su collegamenti esterni per ridurre la possibilità di un exploit che potrebbe essere utilizzato per sottrarre informazioni sull'account, oltre a rendere più chiaro quando un utente lascia un servizio, per ridurre le possibilità di phishing efficace.

Ecco un esempio di reindirizzamento semplicistico in PHP:

<?php
$url = htmlspecialchars($_GET['url']);
header( 'Refresh: 0; url=http://'.$url );
?>
<html>
 <head>
  <title>Redirecting...</title>
  <meta http-equiv="refresh" content="0;url=http://<?php echo $url; ?>">
 </head>
 <body>
 Attempting to redirect to <a href="http://<?php echo $url; ?>">http://<?php echo $url; ?></a>.
 </body>
</html>
    
risposta data 12.01.2013 - 12:49
fonte
8

A partire dal 2015 questo è il modo in cui impedisci al tuo sito web di inviare l'intestazione Referer:

Basta aggiungere questo alla sezione principale della pagina web:

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

Funziona sia per i link che per le richieste Ajax create dal codice JavaScript sulla pagina.

Altre opzioni valide meta includono:

<meta name="referrer" content="unsafe-url" />
<meta name="referrer" content="origin" />
<meta name="referrer" content="no-referrer-when-downgrade" />
<meta name="referrer" content="origin-when-cross-origin" />

• Verifica se funziona per il tuo browser qui: link

• Vedi le specifiche qui: link

Nota: se vuoi rimuovere il referrer usando solo JavaScript, credo che potresti aggiungere il meta tag appropriato dinamicamente prima di fare la richiesta Ajax. Non ho ancora provato questo.

Nota inoltre che i browser ora inviano l'intestazione Origin che include dominio e porta e, per quanto ne so, non possono essere rimossi. Se usi <meta name="referrer" content="origin" /> il referrer conterrà informazioni simili all'intestazione Origin , che è già buona dal punto di vista della privacy, poiché nasconderà la pagina esatta in cui si trova l'utente.

    
risposta data 14.08.2015 - 18:06
fonte
3

Non puoi modificare l'intestazione del referer a meno che tu non controlli il client chiamante, ad es. il browser.

I browser bloccano la modifica del referer, e il codice lato server non può iniettare intestazioni in una richiesta poiché non c'è modo di ottenere l'intestazione dal server al client e fare in modo che il client la inietti nell'intestazione di referenza di esso prossima richiesta.

Questo presuppone che il browser non abbia una particolare vulnerabilità intorno all'iniezione di intestazione da JavaScript però.

    
risposta data 12.01.2013 - 09:28
fonte
0

Vorrei scrivere uno script python (vedi link per una grande libreria, se l'urllib standard sembra complicato ) ma penso che saresti in grado di spoofare il referer usando Tamper data / live http header plugin per firefox. Non sono sicuro, ma dai un'occhiata. Vi sono anche altri componenti aggiuntivi di firefox che consentono di manipolare l'intestazione del referer. Cerca semplicemente un referente nei componenti aggiuntivi di firefox.

    
risposta data 12.01.2013 - 09:56
fonte
0

Un'eccellente panoramica del problema di riferimento e della sua storia può essere trovata in "Stripping referrer for fun and profit" .

Lo stesso articolo contiene anche eccellenti collegamenti a:

  1. Per i più pigri tra noi, il referer.us servizio di reindirizzamento URL e, ancora meglio,
  2. A script lato client indipendente dal browser , utilizzando il fantastico trucco <iframe src=about:blank> .
risposta data 12.12.2013 - 15:23
fonte
0

Non è difficile creare un'intestazione HTTP.

Hai solo bisogno di un terminale e qualche coltellino svizzero come netcat (è uno strumento che ti permette di fare cose di base, come cat sulla rete).

Qualcosa come:

nc << eof www.site2.com 80
GET /somepath/somedest HTTP/1.0
Host: wwww.site2.com
Referer: wwww.site1.com

.
eof

Potrebbe essere sufficiente.

(Nota: il punto . alla fine è inutile, ma una linea vuota segna la fine dell'intestazione)

Quindi la risposta è è possibile simulare un'intestazione HTTP.

Questo è stato fatto su firefox 19.0

Per nascondere il campo referer, ho usato un'opzione in squid proxy server di alcuni anni fa, ma sono sicuro che ci devono essere alcuni moduli o estensioni per un browser che farebbe il trucco ....

... Un rapido sguardo nella mia configurazione di firefox (v19.0) mi permette di vedere che c'è un'opzione: network.http.sendRefererHeader .

Questa opzione può essere impostata su:

  • 0 Non inviare mai l'intestazione Referer o impostare document.referrer.
  • 1 Invia l'intestazione Referer quando fai clic su un link e imposta document.referrer per la pagina seguente.
  • 2 (Predefinito) Invia l'intestazione Referer quando fai clic su un link o carica un'immagine, e imposta document.referrer per la pagina seguente.
risposta data 15.01.2013 - 22:55
fonte

Leggi altre domande sui tag