it-swarm.dev

Giocare con l'intestazione del referer

Ci sono 2 siti:

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

http://www.site1.com contiene il link a http://www.site2.com come

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

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

Mi chiedo se posso falsificare/cambiare (forse con javascript, PHP, ...) Intestazione del referente o non inviarlo affatto?

16
torayeff

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

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

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

  • Usa SSL/TLS (https) sul tuo sito e una funzione di sicurezza del browser non è quella di passare i collegamenti Referer a HTTP sulle tue pagine servite con SSL/TLS. Tuttavia, se i collegamenti sulle tue pagine utilizzano HTTPS, Referer verrà comunque passato se non esplicitamente disattivato con altri mezzi descritti di seguito.
  • Utilizza HTML5 rel="noreferrer" attributo. È supportato da tutti i principali browser.
  • Utilizza un URL di dati ("dati:") per nascondere la pagina effettiva da cui proviene il link: <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 sessione nella stringa di query. Molti siti Web di grandi comunità utilizzano il reindirizzamento dei collegamenti su collegamenti esterni per ridurre la possibilità di un exploit che potrebbe essere utilizzato per rubare informazioni sull'account, nonché per chiarire quando un utente abbandona un servizio, per ridurre la possibilità di un phishing efficace.

Ecco un semplice esempio di reindirizzamento 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>
30
Cristian Dobre

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

Basta aggiungere questo alla sezione principale della pagina Web:

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

Funziona sia per i collegamenti che per le richieste Ajax fatte dal codice JavaScript nella pagina.

Altre opzioni meta valide 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: http://caniuse.com/#feat=referrer-policy

• Vedi le specifiche qui: http://w3c.github.io/webappsec/specs/referrer-policy/

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

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

9
MarcG

Non è possibile modificare l'intestazione del referer se non si controlla il client chiamante, ad es. il browser.

I browser bloccano la modifica del referer e il codice lato server non può iniettare le intestazioni in una richiesta in quanto non c'è modo di ottenere l'intestazione dal server al client e fare in modo che il client lo inietti nell'intestazione del referer della sua prossima richiesta.

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

4
Steve

Scriverei un python (vedi http://docs.python-requests.org/en/latest/ per una grande libreria, se lo standard urllib sembra complicato) ma penso che potresti essere in grado di falsificare il referer usando il plugin Tamper data/live http header plugin per firefox. Non sono sicuro, ma dai un'occhiata. Ci sono anche altri addon firefox che ti permettono di manipolare l'intestazione del referer. Cerca referer negli addon di firefox.

0
xeet

Un'eccellente panoramica del problema dei referral e della sua storia è disponibile in "Stripping referrer for fun and profit" .

Lo stesso articolo contiene anche ottimi 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 , usando il fantastico <iframe src=about:blank> trucco.
0
Serge Stroobandt

Costruire un'intestazione HTTP non è difficile.

Hai solo bisogno di un terminale e alcuni coltellino svizzero come netcat (È uno strumento che ti consente di fare cose molto basilari, come cat in 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 abbastanza.

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

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

Questo è stato fatto su Firefox 19.0

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

... Una rapida occhiata nella mia configurazione di Firefox (v19.0) fammi vedere che esiste un'opzione: network.http.sendRefererHeader.

Questa opzione potrebbe essere impostata su:

  • 0 Non inviare mai l'intestazione del 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 (impostazione predefinita) Invia l'intestazione del referente quando fai clic su un collegamento o carica un'immagine e imposta document.referrer per la pagina seguente.
0
F. Hauri