Come funziona questo controllo
Questo controllo agisce solo se il tuo sito invia già l'header Referrer-Policy; se manca del tutto, lo segnala lo scanner degli header. Scanaris legge il valore e, se contiene unsafe-url o no-referrer-when-downgrade, apre un rilievo di gravità bassa con il valore esatto. Qualsiasi altro valore (strict-origin-when-cross-origin, no-referrer, same-origin, origin, strict-origin) viene accettato. Cioè, non misura che tu abbia l'header, ma che quello che hai non faccia trapelare l'URL completo.
Cos'è il referer e cosa trapela
Ogni volta che un utente clicca un link verso un altro sito, o la tua pagina carica un'immagine o uno script da un altro dominio, il browser invia alla destinazione un header Referer con l'URL della pagina da cui proviene. La policy del referer decide quanto di quell'URL viene inviato. Con unsafe-url, l'URL completo, percorso e parametri inclusi, anche se la destinazione è HTTP. Con no-referrer-when-downgrade, l'URL completo verso qualsiasi destinazione HTTPS; era il comportamento predefinito dei browser fino al 2020 e per questo resta in molte configurazioni vecchie. Ciò che trapela sono cose come /dashboard/fatture/8841, /reset-password?token=..., /cerca?q=licenziamento o l'identificativo di un documento condiviso: tutto ciò che sta nell'URL dell'utente arriva a reti pubblicitarie, servizi di analisi e qualsiasi sito esterno a cui rimandi.
Come risolvere
Il valore consigliato per quasi ogni sito:
Referrer-Policy: strict-origin-when-cross-origin
Invia l'URL completo dentro il tuo stesso dominio (così la tua analitica continua a funzionare), solo l'origine (https://tuodominio.it) ad altri domini, e nulla se la destinazione è HTTP. È il valore predefinito dei browser moderni, quindi impostandolo esplicitamente stai solo fissando ciò che già fanno. Se non ti serve che nessuno sappia da dove arriva il visitatore, no-referrer è ancora più rigoroso.
- Nuxt: in
routeRulesdinuxt.config, nella regola'/**'. - Next.js: nella funzione
headers()dinext.config.js. - Vercel: in
vercel.json. Netlify: in_headers. - nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;. Apache:Header always set Referrer-Policy "strict-origin-when-cross-origin". - Express:
helmet.referrerPolicy({ policy: 'strict-origin-when-cross-origin' }).
Se un link specifico ha bisogno di un altro comportamento (per esempio un programma di affiliazione che esige il referer completo), regolalo su quel link con l'attributo referrerpolicy invece di allentare la policy di tutto il sito.
Verifica che sia risolto
curl -sI https://tuodominio.it | grep -i referrer-policy
Deve mostrare strict-origin-when-cross-origin o no-referrer. Controlla anche che non ci sia un tag <meta name="referrer"> nell'HTML con un valore diverso: il meta ha la precedenza sull'header in quella pagina.
Domande frequenti
Perderò dati in Google Analytics o nel mio strumento di statistiche?
No. L'analitica del tuo stesso sito si alimenta dallo script che includi, non dal referer. Ciò che cambia è quello che vedono i siti a cui rimandi: invece della pagina esatta vedranno il tuo dominio. Per le tue pagine interne, il referer completo resta.
Il mio sito non ha URL con dati sensibili.
Oggi. Un link di reset password, un identificativo d'ordine o un parametro di ricerca compaiono appena il sito cresce. Fissare la policy corretta costa una riga e non ha effetti collaterali.
Perché no-referrer-when-downgrade era il valore predefinito?
Perché nei primi anni del web il referer completo era considerato utile e HTTPS era minoritario. Chrome, Firefox e Safari hanno cambiato il valore predefinito in strict-origin-when-cross-origin tra il 2020 e il 2021 proprio per le fughe che questa guida descrive. Tutti gli header correlati li spiega header HTTP per umani.