PowerScan
PT

Strings User-Agent e Client Hints: o que revelam e o que foi congelado

Impressões digitais do navegador · 6 min de leitura · por PowerScan

Foto: Unsplash

A string de user agent é o sinal de identificação mais antigo da web e o que mais mudou nos últimos anos. Lê-la bem exige saber o que ainda está nela, o que foi deliberadamente congelado e para onde foi o detalhe removido.

O que a string diz

Uma string atual do Chromium no Windows se parece com Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36. Os tokens históricos (Mozilla/5.0, AppleWebKit, like Gecko, Safari) estão ali por compatibilidade com scripts escritos há décadas e não carregam informação alguma. As partes úteis são a plataforma (Windows NT 10.0, mesmo no Windows 11), a arquitetura e a versão principal do navegador.

O que antes estava ali foi removido de propósito. A versão secundária e de patch agora é 0.0.0. A versão do Windows está fixada em 10.0. As strings do Android não incluem mais o modelo do aparelho. Essa é a "redução do user agent" que o Chromium lançou entre 2022 e 2023 justamente porque a string havia se tornado uma superfície de fingerprinting.

Client Hints: os mesmos dados, sob demanda

O detalhe removido não desapareceu; mudou-se para os User-Agent Client Hints. Um servidor pode pedir campos específicos com um cabeçalho Accept-CH, e o navegador passa então a enviar cabeçalhos como Sec-CH-UA-Platform-Version ou Sec-CH-UA-Model nas requisições seguintes. As dicas de baixa entropia (marca e versão principal, plataforma, indicador de dispositivo móvel) são enviadas por padrão. As de alta entropia (versão completa, arquitetura, bitness, modelo, versão da plataforma) só são enviadas aos sites que as pedem, e um script pode solicitar o mesmo conjunto por meio de navigator.userAgentData.getHighEntropyValues().

O objetivo do projeto é que o site precise declarar o que quer, o que torna a coleta visível e auditável. Na prática, um site que queira fazer fingerprinting ainda pode pedir tudo; a diferença é que o pedido é uma requisição que o navegador pode ver, registrar ou recusar.

O problema da consistência

Como os mesmos fatos agora estão disponíveis em duas fontes, eles podem ser comparados. Um navegador que altera a string de user agent para afirmar macOS, mas deixa navigator.userAgentData.platform informando Windows, criou uma contradição trivial de detectar. O mesmo vale para a propriedade navigator.platform, para as fontes específicas do sistema operacional visíveis à página e para a string do renderizador WebGL, que nomeia um driver gráfico que só existe em um sistema operacional. Falsificar apenas a string é uma estratégia perdedora há anos.

Lendo a sua própria

Um diagnóstico mostra a string bruta, o navegador e a versão que ele extrai dela e o motor (Blink, Gecko ou WebKit). Note que todo navegador no iOS informa WebKit, qualquer que seja a marca, porque a Apple exige isso. Se o nome do navegador interpretado o surpreender, a string está sendo alterada por uma extensão ou por uma configuração do perfil; se isso é um problema depende de o restante do navegador concordar ou não com a alteração.

Todos os artigos · Executar a verificação