Redact Google Photos: como devs ocultam dados sensíveis em prints

Redact Google Photos: como devs ocultam dados sensíveis em prints

Screenshot de dashboard vaza chave de API. Print de bug expõe URL com token de sessão. Captura de tela do e-mail do cliente mostra o endereço residencial. Se você já passou por isso, sabe que borrar uma área da imagem não é detalhe estético — é controle de superfície de ataque. Segundo o Eurisko.com.br, o Google começou a distribuir globalmente no Android a ferramenta Redact, integrada ao Markup do Google Photos, e isso muda a forma como devs lidam com privacidade no fluxo de compartilhamento de imagens.

O que é o Redact do Google Photos e por que devs deveriam prestar atenção

O Redact não é uma novidade conceitual — borramento manual existe em qualquer editor desde os anos 2000. O que muda é o contexto: a ferramenta vive dentro do app que você já abriu para conferir a foto, sem exportar, sem editor externo, sem fricção. Para um dev que vive alternando entre Slack, PRs, Loom e stack Overflow, remover três etapas do fluxo significa, na prática, que a redaction vai acontecer. E o que não acontece é o que vaza.

Na minha experiência revisando pull requests e documentações técnicas, vejo três padrões recorrentes de vazamento:

  • Tokens e URLs internas aparecem em prints de dashboards, logs e requests do Postman.
  • Dados pessoais (CPF, endereço, telefone) vazam em capturas de comprovantes ou contratos.
  • Metadados EXIF que revelam GPS, modelo do dispositivo e timestamp — mesmo depois do borramento visual.

O Redact resolve o primeiro e o segundo. O terceiro continua sendo responsabilidade sua.

Na Prática: como usar o Redact passo a passo

  1. Abra a imagem no Google Photos no Android.
  2. Toque em Editar e depois em Markup (o ícone de caneta).
  3. Selecione a ferramenta Redact.
  4. Desenhe ou marque as áreas que deseja ocultar — você pode adicionar múltiplas regiões.
  5. Salve uma cópia ou substitua o original.

Detalhe importante que o anúncio não destaca: a versão original não é sobrescrita por padrão. Você sempre gera uma cópia redatada. Isso é uma escolha defensável — caso você borre a região errada, ainda tem o original. Mas significa que compartilhar a cópia errada continua sendo um risco.

O que a maioria esquece: EXIF metadata continua intacto

Aqui mora o verdadeiro problema técnico. Mesmo com a área borrada, o arquivo JPEG carrega nos metadados:

  • Coordenadas GPS (se a foto foi tirada com localização ativada).
  • Modelo e marca do dispositivo.
  • Timestamp exato da captura.
  • Miniatura embedded que pode mostrar a imagem original.

O Redact mexe no canvas visual, não no cabeçalho EXIF. Para um dev, isso é o equivalente a fazer git commit --amend sem alterar o author — o problema central continua lá. Em workflows sensíveis, você precisa combinar Redact com uma etapa de sanitização de metadados antes de subir a imagem em qualquer lugar.

Como limpar EXIF no terminal (Linux/macOS)

# Usando exiftool — instalação: brew install exiftool  |  apt install libimage-exiftool-perl
# Remove TODOS os metadados, mantendo apenas o essencial
exiftool -all= -overwrite_original imagem_redatada.jpg

# Verifica o que sobrou
exiftool imagem_redatada.jpg

# Se quiser apenas remover GPS (manter modelo e timestamp):
exiftool -gps:all= imagem_redatada.jpg

No Windows, o equivalente nativo PowerShell não é confiável para JPEG EXIF — use ExifTool ou libvips. Em pipelines automatizados de documentação, eu rodo exiftool -all= em todo anexo antes de commitar no repo de docs.

Fazendo redaction no código: quando o Google Photos não basta

Existem cenários em que o Redact do Google Photos simplesmente não atende:

  • Você precisa automatizar a redaction em lote (CI, scripts de QA).
  • Você quer borrar dinamicamente conforme OCR detecta padrões (PII, tokens, e-mails).
  • Você precisa de real redaction — não borramento visual reversível.

Borramento Gaussian é reversível em vários cenários. Existem papers que recuperam imagens borradas com mosaic via técnicas de super-resolution. Para compliance sério (LGPD, HIPAA, GDPR), o correto é opaco: pintar a região com cor sólida, ou — no caso de PDFs — substituir pelo stream de caracteres em branco.

Script Python: redação automática com OCR + OpenCV

Esse snippet detecta e-mails e tokens JWT em uma screenshot e pinta um retângulo opaco sobre eles. Útil para pipelines de documentação automatizada.

import cv2
import numpy as np
import pytesseract
import re
from pathlib import Path

# Padrões sensíveis comuns em screenshots de dev
PATTERNS = [
    re.compile(r'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}'),  # e-mail
    re.compile(r'eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+'),  # JWT
    re.compile(r'sk-[A-Za-z0-9]{20,}'),  # OpenAI API key
    re.compile(r'AKIA[0-9A-Z]{16}'),  # AWS Access Key
    re.compile(r'\b\d{3}\.?\d{3}\.?\d{3}-?\d{2}\b'),  # CPF
]

def is_sensitive(text: str) -> bool:
    return any(p.search(text) for p in PATTERNS)

def redact_image(input_path: str, output_path: str) -> int:
    img = cv2.imread(input_path)
    if img is None:
        raise FileNotFoundError(input_path)

    # OCR com bounding boxes
    data = pytesseract.image_to_data(img, output_type=pytesseract.Output.DICT)

    count = 0
    n = len(data['text'])
    for i in range(n):
        word = data['text'][i].strip()
        if not word or not is_sensitive(word):
            continue

        x, y, w, h = data['left'][i], data['top'][i], data['width'][i], data['height'][i]
        # Expande um pouco para pegar dígitos adjacentes
        pad = 4
        x0 = max(0, x - pad)
        y0 = max(0, y - pad)
        x1 = min(img.shape[1], x + w + pad)
        y1 = min(img.shape[0], y + h + pad)

        # OPAQUE: pinta com preto sólido, não Gaussian
        cv2.rectangle(img, (x0, y0), (x1, y1), (0, 0, 0), thickness=cv2.FILLED)
        count += 1

    cv2.imwrite(output_path, img)
    return count

if __name__ == '__main__':
    redacted = redact_image('dashboard.png', 'dashboard_safe.png')
    print(f'{redacted} regiões sensíveis opacificadas')
    # Próximo passo no pipeline:
    # subprocess.run(['exiftool', '-all=', 'dashboard_safe.png'])

Combine isso com exiftool -all= no final e você tem um pipeline de redaction decente para anexar no seu Makefile ou GitHub Actions.

Erros comuns que devs cometem ao redatar imagens

  • Borrar e compartilhar imediatamente. Esquecer que o EXIF ainda carrega GPS e timestamp. Em docs internas isso é OK; em prints públicos, é leak gratuito.
  • Confiar em Gaussian blur para compliance. Para LGPD/GDPR, blur não é redação válida. Use opaco (preto sólido ou remoção real do conteúdo). Ferramentas profissionais como Adobe Acrobat Pro e Foxit têm “Redact” que substitui o conteúdo subjacente.
  • Borrar só o número do cartão. Esquecer que o nome e a validade também são PII. Mapeie todas as colunas sensíveis antes de marcar regiões.
  • Esquecer abas e barras do navegador. Prints fullscreen capturam URL bar, extensões e notificações. Capture com janela focada ou recorte antes de compartilhar.
  • Redatar em JPEG já comprimido. Borramento sobre JPEG de alta compressão deixa artefatos que podem ser explorados. Prefira PNG para redaction, depois comprima se necessário.
  • Compartilhar a versão errada. Sério: já vi incidente onde o dev mandou a versão sem redact por engano. Padronize nomes: login_redacted.png, login_FINAL.png. Use git diff visual se precisar.

Comparativo: Redact vs alternativas para devs

Ferramenta Tipo Melhor para Limitação
Redact (Google Photos) Móvel, nativo 1–5 screenshots por dia, fluxo rápido Não remove EXIF, só mobile Android
Adobe Acrobat Pro Redact Desktop, PDF-first Documentos legais, compliance LGPD Licença cara, overkill para screenshot
Skitch / Greenshot Desktop, blur manual Workflow rápido no desktop Mesma fragilidade do borramento visual
Pipeline OCR + OpenCV (acima) Automatizado CI, docs automatizadas, alto volume Custo computacional, falsos positivos
ShareX (Windows) com plugin Desktop, extensível Captura + upload + redact em um atalho Curva de configuração

A escolha certa depende de volume. Para um dev solo compartilhando 5 screenshots por semana, o Redact do Google Photos + exiftool -all= resolve. Para um time de 20 engenheiros documentando uma plataforma B2B, automatize.

FAQ — Perguntas que devs realmente fazem

O Redact do Google Photos remove metadados EXIF?
Não. A ferramenta opera apenas sobre o canvas visual. Para remover GPS, modelo e timestamp, use exiftool -all= ou strip no ImageMagick como etapa adicional.

Borramento com Redact é seguro para LGPD/GDPR?
Para compartilhamento informal e mascaramento visual, sim. Para conformidade jurídica formal, prefira redação opaca (preenchimento sólido sem pixels subjacentes) e mantenha trilha de auditoria do que foi removido.

Funciona em iOS?
A distribuição inicial é Android. Se você está no ecossistema Apple, o Markup nativo do iOS ainda não tem equivalente — use app de terceiros (TouchRetouch, Sketchbook) ou pipeline Python descrito acima.

Posso automatizar o Redact no Android?
Não diretamente — não há API pública. Para automação, use a stack OCR + OpenCV que mostrei, ou serviços como Cloud Vision API + Image Processing no GCP, que detecta texto e devolve bounding boxes prontos para mascarar.

O borramento é reversível?
Borramento visual (Gaussian, mosaic) é tecnicamente reversível em vários cenários com modelos modernos de super-resolution. Para redaction real e irreversível, sempre opte por preenchimento opaco com cor sólida — é o padrão de mercado.

Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto — posso expandir o script Python para incluir detecção de QR codes e placas de carro no próximo post.

Y

Yuri Sousa

Front-End Developer / Designer

Desenvolvedor apaixonado por criar experiências digitais acessíveis e visualmente perfeitas. Escrevo sobre desenvolvimento web, design e tecnologia.