O que é fingerprinting de navegador e o que um site realmente consegue ler?

Toda vez que você abre uma página, o navegador entrega ao site uma longa lista de fatos sobre si mesmo. Nenhum deles é secreto, nenhum pede permissão, e a maioria existe para que a página seja exibida corretamente. O fingerprinting é o que acontece quando um site deixa de usar esses fatos para exibir a página e passa a usá-los para reconhecer você.
O que uma página pode ler sem pedir
Um script executado em uma aba comum pode ler, entre outras coisas: a string do user agent, a lista de idiomas preferidos, o fuso horário, o tamanho da tela e a densidade de pixels, o número de threads da CPU, um valor arredondado da memória do dispositivo, a profundidade de cor, se há suporte a toque, o nome do renderizador gráfico por trás do WebGL e o resultado de desenhar uma pequena imagem em um canvas ou renderizar um breve buffer de áudio. Também pode observar quanto tempo certas operações levam, quais fontes alteram a largura de uma linha de texto e quais dispositivos de mídia existem (quantidades, não nomes, a menos que você conceda acesso).
Isoladamente, esses dados são desinteressantes. Um fuso horário reduz você a algumas centenas de milhões de pessoas. Juntos, eles reduzem muito mais, porque o que é raro é a combinação. Uma máquina Windows com uma string de renderizador NVIDIA específica, 12 threads, uma tela de 2560×1440, francês e inglês nessa ordem e um hash de canvas particular não está no meio de uma multidão.
O que torna um sinal útil para identificação
Três propriedades importam. O sinal precisa ser estável: o mesmo navegador deve dar o mesmo valor amanhã. Precisa ser diverso: navegadores diferentes devem dar valores diferentes. E precisa ser barato: legível em milissegundos, sem pedido de permissão. O hash de canvas pontua bem nas três, e é por isso que aparece em toda biblioteca de fingerprinting. O tamanho da tela pontua bem nas duas primeiras e perfeitamente na terceira. O user agent costumava pontuar bem em diversidade e foi deliberadamente achatado pelos fabricantes de navegadores justamente por isso.
O que uma página não consegue ler
Esta parte costuma ser exagerada. O script de uma página não consegue ver seu endereço real se você estiver atrás de um proxy: ele vê o que o proxy apresentar. Não consegue ler outras abas, seu histórico, seus favoritos nem suas senhas salvas. Não consegue saber com certeza se você está em uma janela privada; as heurísticas que afirmam conseguir falham com regularidade. Não consegue saber o seu nome. E não consegue decidir sozinho se um endereço é um proxy ou um data center: esse veredito vem de um banco de reputação que o site paga, não de algo que o seu navegador informou.
Sites que exibem uma “pontuação de bot” ou “proxy: sim” estão combinando o que o seu navegador informou com dados de terceiros. É algo legítimo de se fazer, mas é importante saber qual metade é medição e qual metade é consulta.
Por que existem páginas de diagnóstico
Uma página de diagnóstico como o PowerScan lê os mesmos sinais que um rastreador leria e os mostra a você em vez de armazená-los. O objetivo não é dar uma nota. É permitir que você confira duas coisas: se um sinal que você esperava ocultar está visível e se os sinais são consistentes entre si. A inconsistência é o que faz contas serem sinalizadas: um endereço em um país, o relógio do navegador em outro, um candidato WebRTC que não corresponde ao endereço de onde você chegou.
Ao ler um relatório, trate cada linha como a resposta a uma pergunta: “o que este navegador disse a esta página agora há pouco?”. Nada além disso. Um hash não é um veredito, e o número de sinais lidos não mede o quanto você parece real.


