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.
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 CWOs 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.jpgNo 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
- Envie uma foto de teste pelo formulário real, com a localização ligada.
- Baixe a URL pública exatamente como o navegador recebe. Não leia a versão que você mesmo gravou.
- Leia o arquivo com a leitura gratuita de metadados, sem cadastro. GPS, Make, Model e DateTimeOriginal não devem aparecer.
- Confira os derivados. Miniaturas, avatares redimensionados e versões para o feed são arquivos separados, e cada um precisa passar pelo mesmo teste.
- 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.