pressione ⌘K para trocar de ferramenta
NETWORK · HAR

Sanitizador de Arquivos HAR

Remove tokens, cookies e dados sensíveis de arquivos HAR.

local
har-sanitizer

🖥 Removes cookies, auth headers, tokens, and bodies from a HAR file — entirely in your browser, so secrets never leave your machine.

§01 SOBRE ESTA FERRAMENTA

Visão geral

Um arquivo HAR é o registro que o próprio navegador faz de um carregamento de página, exportado do DevTools. É o anexo mais útil que você pode colocar em um relatório de bug do tipo «aqui funciona», e também uma das coisas mais perigosas que você pode colar em um rastreador de issues público. A captura de uma sessão autenticada contém o seu cookie de sessão, o seu cabeçalho Authorization, qualquer código OAuth que estivesse em trânsito naquele momento, todos os formulários que você enviou e todos os corpos de resposta que o servidor devolveu.

Esta ferramenta reescreve a captura de modo que a estrutura sobreviva e os segredos não. Você mantém a lista de requisições, os métodos, os códigos de status, os nomes dos cabeçalhos, os tempos e os tamanhos — tudo aquilo de que um mantenedor precisa para raciocinar sobre o seu problema — enquanto os valores que comprometeriam a sua conta são substituídos por [REDACTED].

Como usar

  1. No DevTools, abra Network, clique com o botão direito na lista de requisições e escolha Save all as HAR.
  2. Cole o JSON aqui (ou abra o arquivo e cole o conteúdo dele).
  3. Leia a contagem de campos ocultados e depois passe os olhos pela saída.
  4. Clique em Download para salvar sanitized.har e anexe esse arquivo em vez do original.

O que é removido

A captura guarda o mesmo segredo em vários lugares, então a ferramenta precisa limpar todos eles. Deixar um passar é a falha que realmente importa: um arquivo que parece sanitizado é pior do que um arquivo que claramente não está, porque você vai anexá-lo sem pensar duas vezes.

  • Cabeçalhos. Cookie, Set-Cookie, Authorization e qualquer cabeçalho cujo nome contenha token, secret, credential, session ou api-key. Também Location, porque um redirecionamento depois de um callback OAuth carrega o código de autorização na URL.
  • Arrays de cookies já interpretados. O HAR registra os cookies duas vezes — uma como a linha de cabeçalho bruta e outra como um array cookies[] de pares nome/valor. Todo valor desses arrays é limpo independentemente do nome, porque nome de cookie não diz para que o cookie serve (s, _sess e SID são todos cookies de sessão no mundo real).
  • Corpos de requisição. Tanto postData.text quanto os postData.params[] já interpretados são limpos sem olhar para os nomes dos campos. O campo de um formulário de login pode se chamar pass, otp ou cvv, e nenhum deles casa com uma lista de palavras-chave que você pensaria em escrever.
  • Corpos de resposta. Limpos por completo. Esta é a maior fonte isolada de divulgação acidental — uma resposta JSON de /api/me contém o registro inteiro do usuário.
  • Destinos de redirecionamento e frames WebSocket. response.redirectURL e os _webSocketMessages do Chrome, cujo primeiro frame é muitas vezes o handshake de autenticação.
  • Endereço IP do servidor e initiator. serverIPAddress expõe o endereçamento interno; o _initiator do Chrome guarda a URL completa do script que disparou a requisição, query string incluída.
  • Parâmetros de consulta. Qualquer parâmetro cujo nome pareça uma credencial — token, api_key, AWSAccessKeyId, signature, code, state, sid e qualquer coisa que contenha key, secret ou password. Parâmetros que não são segredo, como page e lang, ficam intactos para que as URLs continuem legíveis.
  • Títulos de página e referrers. O título de uma página muitas vezes é só a URL, e um cabeçalho Referer depois de um callback OAuth carrega o código de autorização.

O que é mantido de propósito

Duas categorias ficam intactas mesmo que um filtro grosseiro por palavra-chave as pegasse, porque removê-las destrói o próprio motivo pelo qual você compartilhou o arquivo:

  • Cabeçalhos de resposta CORS. Access-Control-Allow-Origin e companhia não contêm segredo nenhum, e um bug de CORS é um dos motivos mais comuns para compartilhar um HAR. Ocultar a resposta da pergunta torna a captura inútil.
  • Desafios de autenticação. WWW-Authenticate e Proxy-Authenticate descrevem qual esquema o servidor quer. Isso é uma dica, não uma credencial.

O que esta ferramenta não consegue remover

A ocultação baseada em nomes tem um limite claro, e vale saber onde ele está antes de anexar a saída a uma issue pública.

  • Segredos no caminho da URL. /reset/9f3c… e /invite/abc123 são indistinguíveis de /users/42 sem conhecer a rota. Os segmentos do caminho ficam intactos, porque removê-los destruiria a lista de requisições.
  • Tokens em cabeçalhos personalizados com nomes inofensivos. Um cabeçalho chamado X-Client-Id que por acaso carregue um valor assinado não casa com palavra-chave alguma. Passe os olhos pelos seus próprios nomes de cabeçalho antes de compartilhar.
  • Dados pessoais em parâmetros que não são segredo. Um endereço de e-mail em ?email= sobrevive, porque email é nome de campo e não credencial. Se isso importa ou não depende de para quem você está mandando o arquivo.
  • As próprias URLs. Hostnames internos, domínios de staging e caminhos de API são todos preservados e, juntos, descrevem a sua arquitetura.

A regra prática é esta: a ferramenta deixa uma captura segura para anexar a um ticket de fornecedor ou a uma issue no seu próprio rastreador. Trate «seguro para publicar na internet aberta» como um julgamento separado, que você faz lendo o arquivo.

Observações

Os valores são substituídos, e não apagados, então o formato do JSON não muda e qualquer visualizador de HAR continua abrindo o resultado. A única exceção é content.encoding: quando um corpo de resposta é substituído, a declaração base64 que descrevia os bytes originais é removida, porque [REDACTED] não é base64 e um visualizador rigoroso quebraria diante disso.

O contador informa campos limpos ou removidos, não segredos encontrados. A captura de um site estático sem cookie nenhum pode legitimamente relatar um número alto, porque todo corpo de resposta conta.

Uma entrada que não seja um HAR é rejeitada em vez de passar adiante. Uma versão anterior desta ferramenta aceitava qualquer JSON, processava zero entradas e relatava «0 valores sensíveis ocultados» como sucesso — devolvendo o arquivo original com um atestado de saúde. Dizer a você que algo está seguro é o produto inteiro aqui, então a ferramenta agora recusa qualquer coisa que não tenha um array log.entries.

Se você só quer ler uma captura em vez de compartilhá-la, use o visualizador HAR. Ele mascara os segredos na tela, mas nunca reescreve o arquivo, porque de qualquer forma nada sai da sua máquina.

FAQ
Minha captura é enviada para algum lugar?
Não. O arquivo é lido com o FileReader do navegador, reescrito dentro da própria página e devolvido a você como download. Não existe nenhuma requisição de rede. Aqui isso importa mais do que na maioria das ferramentas, porque o motivo de você estar nesta página é justamente o arquivo conter segredos.
O que exatamente é removido?
Cabeçalhos Cookie e Set-Cookie, Authorization e qualquer cabeçalho cujo nome pareça uma credencial, os arrays cookies[] já interpretados tanto da requisição quanto da resposta, todos os corpos de requisição, todos os corpos de resposta, os destinos de redirecionamento, os frames WebSocket, o endereço IP do servidor e qualquer parâmetro de consulta cujo nome pareça um segredo. Os nomes dos cookies e dos cabeçalhos são preservados, para que a captura continue se lendo como uma captura.
Por que os nomes dos cookies continuam visíveis?
Porque o nome é diagnóstico e o valor é o segredo. Saber que uma requisição levava `sessionid` e `csrftoken` costuma ser exatamente o ponto do relatório de bug; saber o que eles continham nunca é.
Você removeu um parâmetro de consulta de que eu precisava. Por quê?
O sanitizador erra para o lado de remover. Um parâmetro chamado `licenseKey` ou `code` tem muito mais chance de ser uma credencial do que de ser um valor que alguém precise em um relatório de bug, então ele cai. A ferramenta de visualização adota a postura oposta e mostra quase tudo, porque lá nada sai da sua máquina.
O resultado pode ser publicado sem risco?
Com menos risco, não sem risco. Segredos escondidos em um segmento do caminho da URL, e não em um parâmetro de consulta, não podem ser detectados pelo nome; e o mesmo vale para um token em um cabeçalho personalizado de nome inofensivo. Leia a saída antes de anexá-la.