Como testar se o seu navegador está vazando (teste de 60 segundos)
Ter proxy ligado não significa estar protegido. Em 60 segundos você roda o verificador de fingerprint, confere user agent, canvas, WebGL, fontes, WebRTC e o JA3/JA4 do seu handshake, e sabe exatamente o que está vazando — sem depender do que o anti-detect promete na propaganda.
Proxy ligado não é o mesmo que estar protegido. Em pouco mais de um minuto você roda quatro checagens que cobrem todas as camadas que um site lê — a superfície de JavaScript, o canal paralelo do WebRTC e o handshake TLS embaixo dos dois — e descobre exatamente o que o seu navegador está entregando, em vez de confiar no que a ferramenta promete na landing page.
Por que "eu uso proxy" não significa "eu estou protegido"
Proxy muda uma coisa só: o endereço IP que o servidor grava no log dele. Ele fica no meio do caminho entre a sua máquina e o destino e repassa os pacotes. Esse é o trabalho inteiro, e é um trabalho útil — mas cobre uma de três camadas que um detector moderno lê.
- Camada de rede. IP público, a operadora dona dele, país e cidade que ele geolocaliza e o histórico daquela faixa. É a camada que o proxy substitui.
- Camada de transporte. O handshake TLS — o primeiro pacote que o navegador manda, antes de chegar um byte de HTML. Ele carrega um fingerprint próprio, resumido em JA3 e JA4. O proxy repassa isso intacto.
- Camada de aplicação. Cabeçalhos HTTP, Client Hints e tudo que a página lê por JavaScript: canvas, WebGL, fontes, áudio, tela, fuso, idioma, hardware. O proxy nem enxerga esses dados, quanto mais altera.
O que derruba conta não é o detector "perceber um proxy". Milhões de pessoas comuns navegam atrás de rede corporativa, NAT de operadora e VPN. O que é sinalizado é contradição: um IP que geolocaliza em São Paulo enquanto o fuso do sistema diz America/New_York, o locale diz en-US e o WebGL informa uma GPU que não existe no sistema operacional que o seu user agent jura estar rodando. Isolado, nada ali é irregular. Junto, aquilo descreve um aparelho que não poderia existir.
Como testar se o seu navegador está vazando?
Quatro checagens, nesta ordem, porque cada uma cobre uma camada que a anterior não alcança. Rode o verificador de fingerprint para a superfície de JavaScript e para os cruzamentos de coerência, teste o WebRTC à parte porque ele escapa do proxy por outro caminho, confira o JA3/JA4 do seu handshake porque JavaScript não chega lá, e depois leia os quatro resultados como uma história só, não como quatro notas soltas.
Uma regra antes de começar: rode o teste duas vezes. Uma no seu navegador do dia a dia e outra dentro do perfil onde você realmente trabalha. A diferença entre os dois relatórios é o valor que a sua configuração está entregando. Sem essa base de comparação você está olhando números soltos, e uma nota bonita significa muito pouco.
Passo 1 — rode o verificador de fingerprint
Abra o verificador de fingerprint dentro do perfil que você usa para trabalhar — não nesta janela em que você está lendo. Essa diferença pesa mais do que parece: quase todo mundo testa o navegador em que navega, recebe um relatório limpo e nunca testa o ambiente onde as contas de fato vivem.
A página lê o que qualquer site lê sem pedir permissão: o objeto navigator (user agent, plataforma, fabricante, idiomas, número de núcleos, memória do dispositivo), o bloco de tela (resolução, profundidade de cor, densidade de pixel), o fuso do Intl, um hash de canvas, as strings de fabricante e renderizador do WebGL, a lista de fontes instaladas, um hash de áudio, os candidatos de WebRTC e os Client Hints que o navegador anuncia.
Anote três valores antes de seguir, porque você vai precisar deles nos próximos passos: o IP público e o país dele, o fuso informado e o hash do canvas. O resto dá para conferir na tela mesmo.
Passo 2 — leia o resultado: user agent, canvas, WebGL, fontes
A nota no topo do relatório é um resumo, não um diagnóstico. É nestes quatro blocos que moram as contradições de verdade.
User agent contra plataforma contra Client Hints
Três campos precisam contar a mesma história. A string de user agent nomeia um sistema operacional; o navigator.platform tem que bater com ele (Win32 no Windows, MacIntel no macOS, Linux x86_64 no Linux); e os cabeçalhos de Client Hints (Sec-CH-UA, Sec-CH-UA-Platform) precisam informar a mesma marca e a mesma versão principal. User agent dizendo Chrome 131 no Windows enquanto os Client Hints ficam mudos é um Chromium que teve a string editada e mais nada. Essa é a falha mais comum em configuração caseira, e ela está destrinchada em por que trocar a string não engana ninguém.
Canvas: o que você quer é estável, não bloqueado
O instinto é querer o canvas "bloqueado". Alvo errado. Recarregue o verificador três vezes e observe o hash. Dentro de um mesmo perfil ele tem que ser idêntico nas três recargas e diferente do hash dos outros perfis. Hash que muda a cada leitura significa que a ferramenta está injetando ruído aleatório novo em toda chamada — e máquina física nenhuma se comporta assim. A instabilidade vira uma assinatura por conta própria.
WebGL: uma GPU plausível para o sistema declarado
O verificador lê as strings de fabricante e renderizador sem máscara. O que importa é se aquela GPU poderia existir na plataforma que você está declarando. Uma string no formato ANGLE (Intel, Intel(R) UHD Graphics ... Direct3D11 ...) é Windows — Direct3D não existe no macOS nem no Linux. Um Mac com chip Apple informa GPU Apple. llvmpipeou um renderizador Mesa por software grita "máquina virtual sem GPU" alto o bastante para algumas plataformas tratarem isso como sinal sozinho.
Fontes: o sistema se entrega
Enumeração de fontes é um dos vetores mais antigos e mais estáveis de fingerprint, e um dos mais fáceis de errar. Perfil Windows sem Segoe UI nem Calibri, perfil macOS sem Helvetica Neue, ou perfil que se diz macOS listando fontes que só vêm no Windows: cada um desses é uma contradição que não custa nada para o site detectar.
Passo 3 — teste o WebRTC separadamente
O WebRTC merece um passo só dele porque não anda pela mesma estrada do tráfego da página. Ele negocia uma conexão ponto a ponto por UDP, com descoberta de endereço própria, e um proxy HTTP ou SOCKS configurado no navegador não carrega isso automaticamente.
O mecanismo é simples. O RTCPeerConnectionpergunta a um servidor STUN "de qual endereço eu pareço estar vindo?". A resposta volta como um candidato server-reflexive. Se aquele pacote UDP saiu pela sua placa de rede de verdade, o candidato carrega o seu IP público real — enquanto a página foi carregada pelo proxy. A página e a conexão ponto a ponto discordam, e o site vê as duas.
.local. Ver um desses na lista de candidatos é normal e esperado. O valor que importa é o público: compare com o IP do seu proxy. Mesmo endereço, tudo certo. Endereço diferente, você está vazando.Rode o teste de vazamento de WebRTC e só depois decida o tratamento. Existem cinco modos comuns, e eles não são intercambiáveis: bloquear (nenhum candidato é coletado), falsificar (um endereço sintético coerente com o proxy), real (passa intacto — só está certo se o seu proxy realmente carregar UDP), encaminhar (leva a conexão ponto a ponto pelo proxy) e desabilitar UDP (força a negociação por TCP). O confronto completo entre eles está no mergulho sobre vazamento de WebRTC.
Passo 4 — confira o JA3/JA4 do seu handshake
Antes de qualquer HTML, antes de qualquer cabeçalho, antes de existir JavaScript, o seu navegador abre a conexão com um ClientHello de TLS. Essa mensagem lista a versão do TLS, as suítes de cifra que ele aceita e em que ordem, as extensões, as curvas elípticas suportadas e os protocolos de ALPN. Cada navegador monta essa lista de um jeito, e a lista é um fingerprint.
O JA3 resume esses campos na ordem em que aparecem. Funcionou bem até o Chrome passar a embaralhar a ordem das extensões de TLS a partir da versão 110, o que faz o JA3 de um Chrome legítimo mudar de conexão para conexão — barulhento sozinho, ainda útil no agregado.
O JA4 é o sucessor e corrige exatamente isso. Ele ordena as listas de cifras e extensões antes de resumir, então o embaralhamento deixa de importar, e mantém um prefixo legível em vez de um hash opaco: um fingerprint como t13d1516h2_... se lê como TLS sobre TCP, TLS 1.3, 15 suítes de cifra, 16 extensões, ALPN fechado em HTTP/2. Dois desses campos sozinhos já separam famílias de navegador.
O que você procura é concordância: o JA4 que o seu handshake produz tem que ser o mesmo que um Chrome real da versão declarada no seu user agent produz. Navegador que diz Chrome 131 na string e emite um handshake que não pertence a nenhum Chrome lançado está descrevendo um aparelho inexistente.
O que é normal vazar e o que não é
Nem todo valor visível é problema. Tentar esconder todos cria um perfil mais raro do que simplesmente deixá-los quietos. Use esta tabela como chave de leitura do seu relatório:
| Sinal | Normal | Sinal de alerta |
|---|---|---|
| IP público | IP do proxy, geolocalizando onde você espera | IP real da sua operadora com o proxy ligado |
| Fuso horário | Bate com o país do IP | UTC, ou um país distante do IP |
| Idioma / locale | Plausível para o país do IP | en-US num IP residencial brasileiro, em conta local |
| Hash do canvas | Estável no perfil, único entre perfis | Muda a cada recarga |
| Renderizador WebGL | GPU que existe no sistema declarado | String Direct3D no macOS, ou renderizador por software |
| Fontes | O conjunto que vem no sistema declarado | Lista vazia, ou fontes de outro sistema |
| Candidato público de WebRTC | Igual ao IP do proxy, ou nenhum | IP público diferente do tráfego da página |
| navigator.webdriver | Ausente ou false | true |
| Client Hints | Mesma marca e versão do user agent | Ausentes num user agent de Chrome |
| JA4 | Bate com um Chrome real da mesma versão | Não pertence a navegador nenhum lançado |
O que fazer se o teste vier ruim
Corrija na ordem do estrago e uma coisa por vez. A tentação depois de um relatório ruim é mexer em seis configurações de uma vez, rodar de novo e ver verde — e aí você não faz ideia de qual mudança resolveu, nem se alguma delas piorou outra coisa.
- IP real exposto pelo WebRTC. Prioridade máxima, porque anula o proxy inteiro. Defina o modo de WebRTC no perfil e teste de novo.
- Fuso ou locale brigando com o país do IP. Barato de corrigir, caro de ignorar — é a contradição que as checagens automáticas pegam primeiro.
- User agent, plataforma e Client Hints fora de sintonia. Mude os três como conjunto, nunca a string sozinha.
- Hash de canvas ou de áudio instável. O que você quer é semente fixa por perfil, não aleatoriedade nova a cada chamada.
- Handshake TLS que não bate com navegador real nenhum. O mais difícil de resolver por configuração, porque é propriedade do binário do navegador, não de uma chave que se marca na tela.
Se você quiser rodar essa mesma sequência num ambiente feito para isso, a versão desktop do AlterAntiX é gratuita e todo perfil abre numa página interna de diagnóstico que roda essas checagens antes de você navegar para qualquer lugar. Baixe aqui e compare os dois relatórios lado a lado: o seu navegador normal contra um perfil isolado. Essa comparação é o teste honesto, e ela leva cerca de um minuto.
- Proxy troca o IP e mais nada — duas das três camadas passam intactas.
- Teste duas vezes: navegador do dia a dia primeiro, perfil de trabalho depois. A diferença é a resposta.
- Estável e coerente vence escondido. Valor que muda a cada leitura vira assinatura sozinho.
- WebRTC e TLS pedem checagem própria — um escapa do proxy, o outro é invisível para o JavaScript.
- Mude uma configuração, rode de novo, compare. Nunca seis de uma vez.
Perguntas frequentes
Uma VPN boa passa nesse teste?
Passa na parte do IP e falha no resto. VPN troca o endereço de saída, exatamente como um proxy, e não toca em canvas, WebGL, fontes, fuso, Client Hints nem no handshake TLS. Se você rodar o teste com a VPN ligada, o IP muda e o resto do relatório continua idêntico ao do seu navegador normal.
O hash do canvas muda a cada recarga. Isso é bom?
Não. Dentro de um mesmo perfil o hash tem que ser estável entre recargas e diferente do hash dos outros perfis. Hash que muda a cada chamada indica ruído aleatório sem semente fixa, e essa instabilidade é, ela mesma, um sinal: máquina real nenhuma devolve um canvas diferente a cada leitura.
Bloquear o WebRTC é sempre a opção mais segura?
É a mais segura contra vazamento de IP e a menos comum entre usuários reais. Um navegador em que o RTCPeerConnection não devolve candidato nenhum é incomum num desktop de consumidor. Em plataformas onde chamada de vídeo é normal, um WebRTC mascarado e coerente com o proxy costuma passar mais despercebido do que um WebRTC morto.
Dá para conferir JA3 e JA4 num site que só roda JavaScript?
Não dá. O handshake TLS acontece antes de qualquer JavaScript existir na página, e o navegador não expõe o próprio ClientHello para o script. Quem consegue calcular o seu JA3/JA4 é o servidor que recebeu o handshake, por isso essa checagem precisa ser feita por uma ferramenta com componente de servidor.
Com que frequência devo repetir o teste?
Sempre que trocar de proxy, atualizar o navegador ou o anti-detect, criar um lote novo de perfis, e ao primeiro sinal de atrito (checagem de identidade repetida, captcha em loop, queda de sessão). Atualização de versão é o gatilho mais esquecido: ela muda o user agent e pode desalinhar o preset de TLS.
O AlterAntiX passa no próprio teste?
Cada perfil aberto no AlterAntiX cai numa página interna de diagnóstico que roda as mesmas checagens e mostra o placar antes de você navegar. Nenhuma ferramenta acerta 100% em todo detector, e quem promete isso está vendendo. O que dá para verificar é a coerência: IP, fuso, locale, Client Hints e handshake contando a mesma história.
Fingerprint e TLS alinhados, de verdade
O AlterAntiX casa o fingerprint do navegador com o TLS na mesma versão de Chrome. Baixe e teste você mesmo.
Baixar o AlterAntiX