Política de Privacidade

O que guardamos, o que nunca guardamos e quem mais toca nisso.

A Tamperlens analisa documentos e guarda quase nada. Esta página descreve o sistema real, coluna por coluna, em vez da lista habitual de tudo que uma empresa poderia coletar.

A versão curta

  • Os documentos que você analisa nunca são gravados em disco, PDFs, imagens e arquivos do Office igualmente, e não são mantidos depois da resposta. Sem cópias, sem cache, sem backup deles.
  • Nunca registramos o conteúdo de um documento, seu texto ou seu nome de arquivo em operação normal.
  • Baselines de emissor guardam uma impressão digital estrutural, nunca um documento. Os documentos de treino são lidos em memória e descartados como qualquer outro envio.
  • O banco de dados guarda três coisas sobre você: uma linha de conta, um hash da sua chave de API e uma linha de registro por análise.
  • Três cookies, todos nossos, e nenhum deles de publicidade ou de rastreamento: a sua sessão, o idioma que você escolheu e um contador assinado de análises anônimas. A seção 4 lista os três.
  • A nossa contagem de visitas acontece no nosso próprio servidor e registra apenas uma data, um caminho e um número. Dois recursos da Cloudflare (a verificação humana que aparece no verificador gratuito e o Cloudflare Web Analytics) são a única coisa que alguma página carrega de outro domínio, e a seção 4 diz exatamente o que fazem e quando.

1. Documentos enviados para análise

Esta seção vale para todo arquivo que você nos envia, seja qual for o tipo. A Tamperlens aceita PDFs, imagens (JPEG, PNG, WebP, GIF, TIFF, HEIF, BMP) e arquivos do Office (.docx, .xlsx, .pptx), e decide qual deles você mandou lendo os bytes, não confiando no nome do arquivo.

Quando você envia um, para o verificador gratuito, para a checagem de tarja, para o leitor de metadados, para a comparação, para o console de teste do painel ou para POST /api/v1/inspect, POST /api/v1/metadata ou POST /api/v1/compare. Os bytes ficam em memória, são interpretados em uma thread de trabalho, transformados em relatório e descartados ao fim da requisição. O limite é de 10 MB por arquivo. Nada é gravado em disco em momento algum, e não existe fila, cache ou armazenamento de objetos atrás de nenhum desses endpoints.

O relatório é devolvido a você e também não é guardado do nosso lado. Se quiser mantê-lo, guarde-o você.

PDFs criptografados são reportados como "conteúdo não analisado" em vez de descriptografados. Não tentamos quebrar proteção por senha.

Os logs do servidor registram o fato da requisição (método, caminho, status, duração), nunca o conteúdo de um documento. Nomes de arquivo não são registrados em operação normal.

Os baselines de emissor não mudam nada disso. Se você treinar um baseline (veja o painel), os documentos enviados para o treino são interpretados em memória e descartados exatamente pelo mesmo caminho de uma análise, nunca são gravados em disco. O que fica guardado é a impressão digital estrutural derivada: quais produtores de PDF, versões de PDF, conjuntos de fontes, tamanhos de página, contagens de revisão e estilos de tabela de referências apareceram nas suas amostras, e com que frequência cada um. São algumas centenas de bytes e não há nenhum texto de documento ali (nenhum nome, nenhum número de conta, nenhum saldo), por desenho e por um validador que se recusa a guardar qualquer outra coisa. Você pode excluir um baseline pelo painel ou com DELETE /api/v1/baselines/:issuer, e ele deixa de existir.

2. Sua conta

Se você criar uma conta, guardamos, em um único banco SQLite:

  • seu endereço de e-mail, em minúsculas;
  • um hash scrypt da sua senha com um salt aleatório por conta, nunca a senha em si, e o hash não é reversível;
  • o momento em que você confirmou seu e-mail, se confirmou;
  • seu id de cliente na Stripe, se você já iniciou um checkout: uma referência opaca, sem dado de cartão;
  • a data de criação da conta.

Chaves de API: guardamos apenas um hash SHA-256 de cada chave, ao lado do plano, da cota mensal, do rótulo e da data de criação. A chave em si existe nos nossos sistemas só pelo tempo de ser exibida uma vez a você. É também por isso que não podemos reenviá-la: a rotação emite uma nova.

Sessões: entrar cria uma linha com um id de sessão aleatório, o id da sua conta e uma validade (30 dias, estendida enquanto você usa o painel). Sair apaga a linha; linhas expiradas são apagadas automaticamente.

Links por e-mail: os links de "confirme seu endereço" e "redefina sua senha" são apoiados por uma linha com um hash SHA-256 do token, seu tipo, sua validade (7 dias para confirmação, 1 hora para redefinição) e se já foi usado. Cada link funciona uma única vez. Linhas expiradas são apagadas automaticamente.

3. O registro de uso

Cada análise acrescenta uma linha ao registro de uso. Essa linha é o registro completo da requisição:

  • um horário;
  • o tamanho em bytes do arquivo enviado;
  • a faixa de risco do relatório (baixo / elevado / alto);
  • e ou o id da chave de API usada (em chamadas autenticadas) ou o endereço IP do cliente (em chamadas anônimas ao verificador gratuito), nunca os dois.

Não existe coluna para o documento, seu nome, seu conteúdo ou qualquer sinal que ele tenha produzido. O registro existe para aplicar as cotas mensais, cobrar corretamente, mostrar a você o seu próprio uso e tornar auditável o limite anônimo.

Retenção:

  • Linhas anônimas (com endereço IP): 90 dias. Endereço IP é dado pessoal, então essas são as linhas de vida mais curta do banco.
  • Linhas com chave (sem endereço IP): 400 dias, um ano com folga, para que comparações mês a mês continuem funcionando.

Uma varredura diária apaga tudo que passou desses prazos.

4. Cookies e o que uma página carrega de outros domínios

Três cookies. Os três são definidos por nós, os três são SameSite=Lax (o navegador nunca os envia em uma requisição feita por outro site, só quando você mesmo navega até aqui, que é o que faz a volta da página de pagamento funcionar) e Secure em produção, e nenhum deles é cookie de publicidade ou de análise:

  • tl_session: definido quando você entra. Guarda um identificador de sessão aleatório e nada mais: sem nome, sem e-mail, sem preferências. É HttpOnly, então o JavaScript não consegue lê-lo. Expira em 30 dias, estendidos enquanto você usa o painel, e em nenhuma hipótese passa de 90 dias contados do login que o criou.
  • tl_lang: definido apenas quando você clica em PT ou EN no cabeçalho. Registra essa única escolha, as duas letras pt ou en, para que a página inicial abra no idioma que você pediu em vez de adivinhar pelo navegador. Só de ler uma página ele nunca é gravado. É o único cookie que não é HttpOnly, então um script deste site conseguiria lê-lo; não guarda identificador nenhum e dura um ano, sobreviver à visita é justamente o propósito dele.
  • tl_checks: um contador de quantos documentos este navegador já analisou anonimamente, usado pela verificação humana descrita abaixo. Guarda um número e um prazo, assinados para que não possam ser editados, e nada que identifique você ou seu aparelho. É HttpOnly, dura sete dias e só é gravado depois de uma análise anônima bem-sucedida, e só onde a verificação humana está ligada.

Por que não há banner de consentimento. Dois dos três são estritamente necessários: não dá para manter você logado sem sessão, nem para contar uma franquia anônima sem contador. O terceiro só é gravado em resposta direta ao seu clique no seletor de idioma: o caso de "serviço expressamente solicitado pelo usuário" que as regras europeias de ePrivacy dispensam de consentimento, e a razão pela qual ler uma página nunca o grava. Nenhum dos três traça perfil de ninguém, nenhum é compartilhado e nenhum pode ser lido por outro site. Não existe aqui cookie de publicidade nem de análise para perguntar a você.

O que uma página carrega de outro domínio. Nossas páginas são feitas dos nossos próprios arquivos: a folha de estilo e os scripts são servidos por tamperlens.com, as fontes são as que já estão no seu aparelho, e nenhuma página carrega fonte, imagem ou folha de estilo de qualquer outro lugar. Dois recursos da Cloudflare são a exceção. Os dois estão ligados nesta instalação hoje, os dois podem ser desligados sem mexer em página nenhuma, e o cabeçalho Content-Security-Policy que o site envia nomeia as origens deles e nenhuma outra:

  • A verificação humana: Cloudflare Turnstile. O verificador gratuito e o leitor de metadados deixam você analisar documentos sem conta nenhuma, e isso precisa ser defendido de abuso automatizado sem receber quem chega pela primeira vez com um enigma. Então nada acontece até a sua quarta análise anônima dentro de uma semana, ou antes disso se a rede que você compartilha já tiver gasto a franquia anônima do dia. Até ali seu navegador nunca fala com challenges.cloudflare.com: sem widget, sem tag de script, nem mesmo a chave pública, que só chega na resposta que pede a verificação. Quando ela aparece, a Cloudflare vê a requisição e o seu endereço IP e responde "humano" ou "não"; é uma prova de que você é gente, não uma verificação de identidade, e ela nunca recebe o seu documento. Chamadas com chave de API e sessões logadas no painel nunca são desafiadas.
  • Cloudflare Web Analytics. A borda da Cloudflare acrescenta às páginas, a caminho de você, um pequeno script de medição: servido por static.cloudflareinsights.com e reportando para cloudflareinsights.com. Ele não está no nosso HTML e o nosso próprio servidor não consegue enxergá-lo. O que ele mede (a página, o referenciador, os tempos de carregamento e o endereço IP e a localização aproximada que qualquer requisição web já carrega) é processado pela Cloudflare sob os termos dela, e chega a nós apenas como números agregados no painel da Cloudflare. Ele não define cookie nenhum nosso. O nosso contador da seção 5 é aquele em que este site realmente se apoia, e se você bloquear o script nada muda no site.

Qualquer outra coisa que o seu navegador acabe guardando da Cloudflare (um cookie de detecção de robôs definido na borda, por exemplo) é da Cloudflare, definido sob os termos dela como parte de transportar o tráfego, e nunca é lido por nós.

5. Como contamos as visitas

Queremos saber se alguém está lendo o site. Então o servidor mantém um contador: a cada página servida com sucesso ele incrementa uma linha identificada por (data UTC, caminho da página, etiqueta de campanha). Ele é nosso, roda na nossa própria máquina e é coisa diferente do script da Cloudflare da seção 4.

A etiqueta de campanha é sobre o link, não sobre você. Quando um link que você seguiu carrega um rótulo ?utm_campaign ou ?utm_source (texto escolhido por quem publicou o link, idêntico para todo mundo que clica nele), guardamos esse rótulo ao lado do caminho, para saber de qual publicação veio a visita. Nunca lemos utm_term nem utm_content, os dois campos que ferramentas de marketing personalizam por destinatário; o rótulo é reduzido a um token curto em minúsculas; e o número de rótulos distintos guardados por dia tem um teto, de modo que uma enxurrada de rótulos únicos desaba numa única linha "(other)" em vez de virar uma impressão digital.

É esse o registro inteiro. Não há endereço IP, agente de usuário, referenciador, cookie, sessão, identificador de visitante ou de dispositivo, nem forma de reconstruir um. Uma linha diz "a página de preços foi servida 14 vezes em 2026-07-25, três delas pelo link da publicação de lançamento" e não consegue dizer mais, porque a tabela não tem outras colunas. Não sabemos se foram 14 pessoas ou uma pessoa catorze vezes, e estamos satisfeitos com isso.

Somente o titular do site consegue ler esses contadores, por um endpoint protegido por um token secreto separado.

6. Quem mais processa seus dados

Esta é a lista completa, e é a lista que vale. A tabela da página de segurança é a mesma lista em outro formato; se as duas divergirem, esta aqui é a política. Nenhum desses fornecedores recebe um documento enviado, porque nenhum documento sobrevive à requisição que o trouxe.

  • Hetzner (hospedagem): a aplicação e o banco rodam em um único servidor virtual no data center da Hetzner em Helsinque, Finlândia. A Hetzner é uma empresa alemã e suas instalações estão na União Europeia. Um snapshot do banco é tirado a cada seis horas e fica no disco desse mesmo servidor, em um diretório que só a conta de serviço consegue ler, ao lado dos backups que a própria Hetzner faz da máquina. Uma vez por dia, uma cópia desses snapshots também é puxada para uma máquina controlada pelo operador, fora do provedor, e mantida lá por sessenta dias. Assim, perder o servidor não significa perder também todos os backups dele. Sendo direto: nos dois lugares esses snapshots são protegidos por permissão de arquivo, não por criptografia própria. Eles não contêm documento nenhum, porque o banco nunca guarda um.
  • Cloudflare (CDN, proxy, TLS, verificação humana, web analytics) : todo o tráfego chega a nós pela Cloudflare, que termina o TLS, serve os arquivos estáticos em cache e provê o túnel até nosso servidor. A Cloudflare processa metadados da requisição, incluindo seu endereço IP, sob os termos dela; recebemos o IP do cliente pelo cabeçalho CF-Connecting-IP e o usamos apenas como descrito na seção 3. A Cloudflare também fornece os dois recursos de página da seção 4: a verificação humana Turnstile no verificador anônimo e o Cloudflare Web Analytics.
  • Stripe (pagamentos), se você assinar, a Stripe coleta e processa seus dados de pagamento e cobrança. Dados de cartão nunca chegam aos nossos servidores; guardamos apenas a referência de cliente da Stripe. A Stripe atua como controladora independente para fins de conformidade próprios.
  • Resend (e-mail transacional): usada, quando configurada, para enviar os dois e-mails que este serviço envia: confirmação de endereço e redefinição de senha. Ela recebe seu e-mail e a mensagem. Não existe lista de marketing e não enviamos newsletter.
  • Sentry (relato de erros), quando uma requisição falha com erro de servidor, a exceção, o stack trace, o padrão da rota e o método HTTP são enviados ao Sentry para que aquilo possa ser corrigido. O que produziu o erro não vai junto: o corpo da requisição, os cookies, a query string e o seu endereço IP são descartados antes de o evento sair do nosso processo, todo cabeçalho que carrega credencial vira [redacted], e qualquer chave de API, token de sessão, e-mail ou endereço IP que apareça dentro de uma mensagem de erro também é mascarado na saída. Erros que o chamador deve esperar (chave recusada, arquivo grande demais, cota esgotada), não são relatados. Um processador com dados higienizados continua sendo um processador, e é por isso que ele está nomeado aqui.
  • GitHub (código-fonte, CI, deploys): o código vive lá e um push roda os testes e dispara o deploy. Não guarda dado de produção nem nada sobre você. Está na lista porque o código que chega ao nosso servidor passa por ele.

Não vendemos nem alugamos dados pessoais, e não os compartilhamos com mais ninguém a não ser quando legalmente obrigados.

7. Por que podemos guardar isso (bases legais)

  • Execução do contrato com você: sua conta, sua chave, o registro de cota, a sessão e os e-mails sobre sua conta. Sem isso o serviço não funciona.
  • Legítimo interesse. O registro anônimo do limite de taxa e os contadores de página, ambos o mínimo necessário para manter o serviço disponível e para saber se alguém o lê.
  • Obrigação legal: manter registros de cobrança pelo prazo que a legislação tributária exigir.

8. Seus direitos

Você pode pedir para ver o que guardamos sobre você, corrigir, exportar ou excluir. Escreva para [email protected] a partir do endereço da conta e agiremos: normalmente em poucos dias, e em qualquer caso dentro de 15 dias.

A exclusão remove a linha da sua conta, seus hashes de chave, suas sessões e suas linhas do registro de uso. Duas coisas sobrevivem, e é justo que você saiba: os registros de cobrança na Stripe, que não podemos apagar por ela e que a legislação tributária exige guardar; e os contadores de visita, que não contêm nenhuma referência a você e portanto não podem ser ligados a você.

No Brasil, você pode também reclamar à ANPD. Na União Europeia ou no Reino Unido, à autoridade local de proteção de dados.

9. Segurança

  • Tudo é servido sobre HTTPS; não existe endpoint em HTTP puro.
  • Senhas usam hash scrypt com salt por conta; chaves de API e tokens de e-mail são guardados como hashes SHA-256.
  • Todas as páginas rodam sob uma Content-Security-Policy estrita, sem scripts nem estilos embutidos. As únicas origens permitidas além da nossa são os dois recursos da Cloudflare citados na seção 4, challenges.cloudflare.com, para a verificação humana, e o script do Cloudflare Web Analytics, e cada um só aparece na política enquanto aquele recurso está ligado.
  • O parser trata todo arquivo como hostil: limites rígidos de tamanho e complexidade, orçamento de tempo e execução em uma thread separada que é morta e substituída se um arquivo demorar demais. JavaScript embutido é sinalizado, nunca executado.
  • O contêiner da aplicação roda como usuário sem privilégios, com sistema de arquivos somente leitura fora do volume de dados, e não publica portas diretamente na internet.

Nenhum sistema é perfeito. Se você encontrar uma vulnerabilidade, escreva para [email protected] antes de divulgá-la publicamente, e trabalharemos com você.

10. Crianças

A Tamperlens é uma ferramenta para desenvolvedores e não é dirigida a crianças. Não criamos contas conscientemente para menores de 16 anos.

11. Alterações desta política

A data de "última atualização" no topo sempre reflete a versão vigente. Se uma mudança afetar materialmente como tratamos dados pessoais, avisaremos os titulares de conta por e-mail antes de ela valer.

12. Contato

O controlador dos dados é o titular individual da Tamperlens, no Brasil, a página Sobre diz quem é, e acompanha o registro da pessoa jurídica em andamento. Para qualquer dúvida, pedido ou reclamação de privacidade: [email protected].