Double Meta Refresh (DMF) per nascondere il referer

Con questo post rispondo ad una serie di domande che spesso mi arrivano in merito al referer.

Ogni request HTTP inviata da un browser ad un web server è costituita da una molteplicità di informazioni tra cui, appunto, il referer (una “r” in inglese-americano o doppia “referrer” in inglese). Il referer è l’URL della pagina contenente il link su cui il visitatore ha cliccato per raggiungere il sito.
Il referer indica la fonte (o “source”) della visita.

Attraverso l’analisi del referer è possibile risalire, in taluni casi, ad informazioni aggiuntive come la keyword ricercata dall’utente nel caso in cui la visita arrivi da un motore di ricerca.

Possiamo risalire ai referer delle visite ad un nostro sito esaminando i i tracciati raccolti dai tool di web analytics oppure  possiamo sviluppare script ad hoc mediante un linguaggio di scripting server side; per esempio in PHP è sufficiente la seguente istruzioni per visualizzare il referer:

<?php echo $_SERVER["HTTP_REFERER"] ?>

Il Double Meta Refresh o DMF è una semplice tecnica a cui si può ricorrere per sovrascrivere il referer o, più correttamente, per accertarsi di non comunicare il referer originale. Il DMF consiste nell’esecuzione in sequenza di due meta refresh.

Il meta refresh è un metodo attraverso cui il browser eseguendo un’istruzione HTML meta ricarica il contenuto della pagina corrente dopo un certo numero di secondi. In realtà è possibile istruire il browser affinchè esso ricarichi la stessa pagina corrente o una nuova pagina anche di un dominio esterno.

<meta http-equiv="refresh" content="0;url=http://example.com/" />

Questa istruzione aggiorna il contenuto della finestra del browser (dopo un tempo di 0 secondi, content=”0;) caricando una pagina esterna (;url=http://example.com). Tecnicamente il meta refresh non è propriamente una redirect 301 o 302 come quella ottenibile attraverso l’istruzione PHP:

<?php header("location: http://example.com"); ?>

Dunque, potrebbe accadere che le informazioni relative al referer (e non solo queste) contenute nelle intestazioni dei pacchetti HTTP siano sovrascritte o annullate durante il refresh. In altre parole, per il sito example.com, il refresh potrebbe risultare come un accesso diretto o, al più, come un accesso dal dominio che ospita la pagina contenente l’istruzione di refresh.

Questa sovrascrittura del referer non è sempre garantita e può dipendere dal browser. Alcuni browser, per esempio, sono in grado di conservare il referer anche successivamente ad un meta refresh. Nel caso specifico di Firefox, si possono notare comportamenti diversi anche in funzione della versione o sub-release del browser. Analogo discorso per Chrome ed Opera.

Per ovviare a queste situazioni particolari in cui il referer è mantenuto, la tecnica DMF prevede l’esecuzione di un duplice refresh per mezzo di due pagine (ospitate su uno stesso sito dedicato allo scopo).

La prima pagina p1 include un’istruzione di meta refresh alla seconda pagina p2, la pagina p2 verifica che il referer sia nullo o che contenga il nome del dominio che ospita p1 e p2 (e che dovrebbe essere diverso da quello di provenienza della visita); se almeno una delle precedenti condizioni è verificata, viene eseguito il secondo meta refresh alla pagina di destinazione, altrimenti non viene eseguito il refresh. In PHP:

<?php if  ($_SERVER["HTTP_REFERER"]=='' ||

strpos($_SERVER["HTTP_REFERER"], 'dominio di p1 e p2')!==false)

// esegui refresh

else

// fai altro non eseguire refresh
?>

Questa soluzione permette di ottenere delle redirezioni a pagine con una ragionevole certezza di sovrascrittura del referer.

2 Comments

jomaggio 7th, 2011 at 15:46

ciao potresti dirmi:

come faccio ad inserirlo in una pagina del browser di un’applicazione di facebook?

Ilariasettembre 4th, 2011 at 01:16

Salve! :) ho una domanda che creo dalla mia più assoluta ignoranza in materia. Cosa sta a significare mettere “– no referer” dopo la lunga scritta nella casella destino, tra le proprietà di google chroome? Scusatemi se la domanda vi smbra stupida, io cercavo di mettere un tool per un gioco e mi dicono di aggiungere questa cosa!!

Leave a comment

Your comment