Executando verificação de segurança...
1

Sobre "resolve só parte do problema":

O processamento client-side resolve exatamente a parte que 99% das alternativas do mercado não resolvem: custódia de dados pelo operador. Quando um PDF é enviado para iLovePDF, SmallPDF, Adobe Online etc., o arquivo passa por servidores de terceiros com logs, backups, funcionários com acesso, obrigações legais de retenção (Marco Civil, LGPD, subpoena internacional) e uma superfície de ataque considerável. Eliminar essa custódia não é parte pequena do problema — é o vetor principal de vazamento de documentos em serviços SaaS. 100% dos vazamentos de OCR/PDF dos últimos anos (MyHeritage, Dropbox, etc.) foram server-side.

Sobre performance do Tesseract WASM:

Correto. WASM é ~3-5x mais lento que um worker nativo no servidor. Trade-off consciente e explícito. Para documentos de 1-20 páginas a diferença em segundos é aceitável. Para OCR em 500+ páginas, a recomendação apropriada é solução desktop (Tesseract CLI, OCRmyPDF local). A ferramenta não se propõe a ser a mais rápida — se propõe a não transferir custódia.

Sobre Spectre/Meltdown em buffers do browser:
Argumento desatualizado. Desde 2018, navegadores implementam:

  • Site Isolation (Chrome) — cada origem em processo separado, impedindo leakage cross-origin
  • COOP/COEP — necessários para habilitar SharedArrayBuffer, que é o vetor crítico
  • Timer precision reductionperformance.now() degradado para 100µs, inviabilizando timing attacks práticos
  • Cross-Origin-Resource-Policy — isolamento de recursos

Para um PWA estático, sem scripts de terceiros, sem ads, sem trackers, com CSP restritivo, o vetor Spectre é teoricamente interessante mas praticamente inexplorado há 6+ anos. Em comparação, um servidor processando o mesmo arquivo tem CVEs ativos anuais em libpng, libjpeg, pdfium, poppler, tesseract-server e todo o stack de rede.

Sobre limpeza segura de buffer:
JS não tem memset_s explícito, mas:

  • Buffers são garbage-collected ao sair de escopo
  • Canvas é invalidado com canvas.width = 0 (libera backing store)
  • ArrayBuffers são rehidratados pelo alocador do V8, que zera páginas antes de remapear
  • Não há persistência: tudo vive apenas enquanto a aba está aberta (sem localStorage, sem IndexedDB para arquivos, sem cookies de estado)

Um servidor que processa o mesmo PDF possui logs, swap, core dumps, backups de disco, snapshots de VM e métricas com samples de payload — nenhum desses vetores existe no client-side. Zeroização explícita é feature de sistemas críticos (HSM, kernels militares), não baseline de SaaS de OCR.

Sobre transferir custo computacional para o hardware do usuário:

Esse é o modelo padrão de software local desde 1985 (Word, Photoshop, VLC, IDEs, compiladores). A alternativa é devolver o custo ao servidor — e junto com ele, o controle, a visibilidade e a confiança. No modelo client-side, o browser é uma sandbox conhecida e auditável, o código é estático e inspecionável (Ctrl+U), e não há estado persistente server-side.

Nenhuma ferramenta é perfeita, mas "processa no device e some quando a aba fecha" é um modelo de ameaça substancialmente mais simples de auditar do que "confie que o backend não guarda nada". O código-fonte está na página — verificação é trivial.

Carregando publicação patrocinada...