Como funciona esta verificação
Esta verificação só atua se o teu site já envia o cabeçalho Referrer-Policy; se faltar por completo, assinala-o o scanner de cabeçalhos. O Scanaris lê o valor e, se contiver unsafe-url ou no-referrer-when-downgrade, abre um achado de severidade baixa com o valor exato. Qualquer outro valor (strict-origin-when-cross-origin, no-referrer, same-origin, origin, strict-origin) é dado por bom. Ou seja, não mede se tens o cabeçalho, mas se o que tens não deixa fugir o URL completo.
O que é o referer e o que foge
Sempre que um utilizador clica numa ligação para outro site, ou a tua página carrega uma imagem ou um script de outro domínio, o browser envia ao destino um cabeçalho Referer com o URL da página de onde vem. A política de referer decide quanto desse URL é enviado. Com unsafe-url, o URL completo, com caminho e parâmetros, mesmo que o destino seja HTTP. Com no-referrer-when-downgrade, o URL completo para qualquer destino HTTPS; era o comportamento por defeito dos browsers até 2020 e por isso continua em muitas configurações antigas. O que foge são coisas como /dashboard/faturas/8841, /reset-password?token=..., /pesquisar?q=despedimento ou o identificador de um documento partilhado: tudo o que estiver no URL do utilizador chega a redes de anúncios, a serviços de analítica e a qualquer site externo para onde ligues.
Como corrigir
O valor recomendado para quase qualquer site:
Referrer-Policy: strict-origin-when-cross-origin
Envia o URL completo dentro do teu próprio domínio (assim a tua analítica continua a funcionar), só a origem (https://teudominio.com) para outros domínios, e nada se o destino for HTTP. É o valor por defeito dos browsers modernos, por isso ao pô-lo explicitamente só estás a fixar o que já fazem. Se não precisas que ninguém saiba de onde vem o visitante, no-referrer é ainda mais estrito.
- Nuxt: em
routeRulesdonuxt.config, na regra'/**'. - Next.js: na função
headers()donext.config.js. - Vercel: no
vercel.json. Netlify: no_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 alguma ligação concreta precisar de outro comportamento (por exemplo um programa de afiliados que exige o referer completo), ajusta-o nessa ligação com o atributo referrerpolicy em vez de relaxar a política de todo o site.
Confirma que está corrigido
curl -sI https://teudominio.com | grep -i referrer-policy
Deve mostrar strict-origin-when-cross-origin ou no-referrer. Confirma também que não há uma etiqueta <meta name="referrer"> no HTML com um valor diferente: a meta tem prioridade sobre o cabeçalho nessa página.
Perguntas frequentes
Vou perder dados no Google Analytics ou na minha ferramenta de estatísticas?
Não. A analítica do teu próprio site alimenta-se do script que incluis, não do referer. O que muda é o que veem os sites para onde ligas: em vez da página exata verão o teu domínio. Para as tuas próprias páginas internas, o referer completo mantém-se.
O meu site não tem URLs com dados sensíveis.
Hoje. Uma ligação de repor palavra-passe, um identificador de encomenda ou um parâmetro de pesquisa aparecem assim que o site cresce. Fixar a política correta custa uma linha e não tem efeitos secundários.
Porque é que no-referrer-when-downgrade era o valor por defeito?
Porque nos primeiros anos da web o referer completo era considerado útil e o HTTPS era minoritário. O Chrome, o Firefox e o Safari mudaram o valor por defeito para strict-origin-when-cross-origin entre 2020 e 2021 precisamente pelas fugas que esta guia descreve. Todos os cabeçalhos relacionados explica-os cabeçalhos HTTP para humanos.