MetaWipeAnalisar

Seu site recebe fotos? Apague os metadados no upload

Fotos enviadas por usuários podem carregar GPS e o modelo do aparelho. Veja como remover os metadados no upload com sharp, ImageMagick e ExifTool, sem perder a orientação da foto.

Por Publicado em 7 min de leitura

Sim. Quando o site aceita foto de usuário e publica o arquivo como veio, ele publica também o GPS de onde ela foi tirada. A correção fica no servidor, no momento do upload: a imagem é reprocessada antes de ser gravada, e só a versão limpa vai para o armazenamento público.

Este texto é para quem desenvolve ou gerencia o produto. O MetaWipe limpa arquivos um a um ou em lote pelo navegador; ele não substitui a etapa do seu pipeline. O que ajuda é verificar o resultado e limpar o que já está publicado.

O que o usuário envia sem saber

Uma foto tirada com o celular e a localização ligada carrega um bloco de metadados. Este é um exemplo ilustrativo, com valores inventados:

GPSLatitude      : 23 deg 33' 1.20" S
GPSLongitude     : 46 deg 38' 2.40" W
Make             : Apple
Model            : iPhone 15
DateTimeOriginal : 2026:10:02 08:14:55
Orientation      : Rotate 90 CW

Os três primeiros campos são os que mais importam em privacidade. A latitude e a longitude apontam o lugar; o fabricante e o modelo dizem o aparelho; a data de captura diz a hora. O campo de orientação parece inofensivo, e é justamente o que vai dar problema no reprocessamento, como se verá adiante.

Quem não remove esses campos no servidor entrega o original para qualquer um que baixe o arquivo. O guia sobre como remover a localização GPS das fotos explica o mesmo problema do ponto de vista de quem fotografa.

Por que servir o original é o problema

Um arquivo público no bucket ou numa pasta estática é acessível pela URL. Quem tem a URL tem a foto e, com o GPS, pode chegar à casa de quem anunciou um imóvel ou à academia de quem postou uma avaliação. Não é preciso invadir nada: basta baixar. Para avatar, anúncio de aluguel ou avaliação com foto de local, esse é o vazamento típico, e ele não aparece em nenhum teste de funcionalidade.

Reprocessar no upload com sharp

sharp é uma das bibliotecas de imagem mais usadas no Node. Por padrão, a saída não carrega EXIF, XMP nem IPTC, e a imagem é convertida para o espaço de cor sRGB. O ponto que costuma ser esquecido é a orientação: o método rotate(), sem argumento, aplica a rotação que o campo Orientation descreve antes de ele ser descartado. Sem isso, uma foto de celular tirada em pé aparece deitada.

import sharp from "sharp";

export async function limparFoto(entrada) {
  return sharp(entrada)
    .rotate()
    .jpeg({ quality: 88 })
    .toBuffer();
}

Esse trecho converte a imagem para JPEG, o que é intencional para avatar e anúncio. Se a entrada for PNG e você quiser manter o formato, use o método do formato correspondente. Para HEIC, o suporte depende de como o libvips foi compilado no seu ambiente; teste antes de contar com ele.

Existe a opção withMetadata(), que mantém os metadados de entrada. Ela copia tudo por padrão, inclusive a localização. Não a use para fotos de usuários sem entender o que passará a ser publicado.

Alternativa com ImageMagick e ExifTool

Se a pipeline não é Node, os comandos de linha resolvem o mesmo problema:

magick entrada.jpg -auto-orient -strip saida.jpg
exiftool -all= -overwrite_original foto.jpg

No ImageMagick, -strip remove perfis e comentários junto com o EXIF, e por isso -auto-orient vem antes. No ExifTool, -all= apaga os campos sem reescrever os pixels, mas também apaga a orientação. Sem -overwrite_original, o ExifTool deixa uma cópia de backup com o original na mesma pasta, o que é justamente o que você não quer num servidor. Ele também pode retirar o perfil de cor, então confira as cores depois.

Como conferir o que o servidor entrega

  1. Envie uma foto de teste pelo formulário real, com a localização ligada.
  2. Baixe a URL pública exatamente como o navegador recebe. Não leia a versão que você mesmo gravou.
  3. Leia o arquivo com a leitura gratuita de metadados, sem cadastro. GPS, Make, Model e DateTimeOriginal não devem aparecer.
  4. Confira os derivados. Miniaturas, avatares redimensionados e versões para o feed são arquivos separados, e cada um precisa passar pelo mesmo teste.
  5. Repita a verificação quando trocar a biblioteca, a versão ou a configuração de saída.

Para o formato, vale conferir também a remoção por tipo, como em remoção de metadados de JPG e remoção de metadados de WebP, já que conversões para WebP podem ou não preservar os campos conforme a ferramenta.

Fotos que já estão no armazenamento

O código de upload não corrige o passado. Para fotos antigas, faça um script que percorra o armazenamento, reprocesse cada arquivo com a mesma função e substitua a versão pública. Se o site guarda o original para moderação, mantenha-o em área separada, com acesso restrito, e não na pasta que a URL pública serve.

Para um lote pontual de até 50 arquivos por vez, o limpador do MetaWipe faz o trabalho pelo navegador e devolve um ZIP. Para o volume de um site, o script é o caminho, e o lote serve para conferir ou corrigir casos isolados.

Minimização também vale no código

A LGPD pede que o tratamento seja limitado ao necessário, princípio do artigo 6º, inciso III. Um avatar não precisa de localização, modelo de aparelho ou hora exata da captura. Remover no upload aplica esse princípio no fluxo técnico: o dado que você nunca guarda não vaza e não entra na política de retenção. Veja por que metadados são dados pessoais.

Vale a pena também olhar o que o formato de saída guarda. Um texto sobre metadados em WebP e AVIF mostra que esses formatos também carregam blocos de metadados, e a conversão pode copiá-los ou não.

Uma ressalva honesta

Remover metadados não resolve tudo. Uma foto de rua pode mostrar a placa de um carro ou a fachada da casa de alguém. Isso é conteúdo, e o servidor não enxerga pelo arquivo. Moderação de conteúdo continua sendo outra etapa. E trocar a pipeline de imagem pode mudar cores e tamanhos de saída, então teste com uma amostra antes de liberar a mudança para todos.

Perguntas frequentes

Fotos enviadas por usuários podem ter GPS?

Podem, e isso é comum quando a foto saiu direto da câmera do celular com a localização ligada. Uma foto de avatar, de anúncio ou de avaliação pode carregar a latitude e a longitude, a data e o modelo do aparelho. Quem envia costuma não saber. Por isso a foto precisa ser tratada no servidor, e não confiada ao usuário.

Como remover o EXIF das imagens no upload?

Reprocesse a imagem antes de gravá-la. Com a biblioteca sharp no Node, a saída padrão não copia EXIF, XMP nem IPTC. Com o ImageMagick, use -strip depois de -auto-orient. Com o ExifTool, o comando -all= remove os campos, mas também apaga a orientação, então rotacione antes. Em qualquer caso, teste o arquivo que o servidor entrega, não o que você gravou.

Remover metadados da foto diminui a qualidade?

Depende da forma. Remover só o bloco de metadados não mexe nos pixels. Mas reprocessar a imagem para gravá-la de novo gera uma nova compressão, que é perceptível em fotos com muitos detalhes. Para avatar e anúncio, uma qualidade alta costuma ser suficiente. Para o original, prefira remover os campos sem recodificar a imagem.

Como confirmar que o site não expõe a localização original?

Envie uma foto de teste com localização ligada pelo formulário real, baixe o arquivo pela URL pública exatamente como o navegador recebe e leia os campos. Verifique também as miniaturas e as variações geradas, porque cada derivado tem sua própria cópia de metadados. Repita o teste quando trocar de biblioteca ou de versão.

Vale remover metadados de fotos que já estão publicadas?

Vale, e em volume é um trabalho de script: percorrer o armazenamento e reescrever cada arquivo com a mesma função de limpeza. Antes, confirme se o original é necessário para moderação ou suporte. Se for, guarde-o em área separada, com acesso restrito, fora da pasta que a URL pública serve.

Continue lendo

Leitura gratuita, sem cadastro.

Analisar