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

[ DÚVIDA/AJUDA ] Como realizar o upload de imagens de documentos pessoais de forma segura?

E aí pessoal, como estão?

Vou desenvolver um sistema onde será realizado o upload de imagens de documentos pessoais, como RG, CPF e outros, mas estou com dúvida de como devo fazer para proteger esses documentos na hora do upload. O sistema será usado por pessoas específicas, não será aberto para todos.

O front-end será feito com React, o back-end com Spring Boot, os dados serão salvos no Postgre e o upload das imagens será feito no Firebase.

Não tenho um conhecimento muito profundo relacionado à segurança, por isso se puderem dar um norte de como deve ser feito, de melhores práticas, de ferramentas ou deixar o link de materiais e vídeos que falem sobre o isso.

Aproveitando o assunto, é melhor fazer o upload para o back-end e o back-end salvar no Firebase ou realizar o upload direto do front-end para o Firebase? Já que assim é uma camada a menos para trafegar as imagens.

3

O ideal é usar URL's assinadas para o documento. Por exemplo, cliente solicita o documento e então é gerado uma url assinada (com token e tempo de expiração) e so através dessa assinatura ele consegue abrir o documento (nao vai existir url publica no caso, mas verifica melhor no firebase que já deve ter algo pronto pra isso).

3

Será que o uso de chaves privada/pública não seria uma forma de manter o conteúdo apenas acessível para o detentor da chave privada? Utilizamos este sistema para encriptar emails e seus anexos (Thunderbird, por exemplo) e somente o destinatário terá como abrir o pacote.

Como seu público é bastante restrito, pode ser mais fácil ensiná-los a criar o pacote encriptado caso não consiga desenvolver uma aplicação Javascript/WASM que faça todo trabalho no lado do cliente. Sei que é possível off-browser e algumas ideias ainda exploram a potencialidade de computação do lado do cliente no próprio browser (0bin, privateBin etc.) para encriptar conteúdo antes de enviar para o servidor.

Só não achei (ainda) uma aplicação Javascript/WASM que leia uma chave pública e encripta o conteúdo. Posteriormente, envia para o servidor via POST ou WSS. Suspeito que esta biblioteca pode ser útil, só não a testei. É um projeto mantido pela Proton Mail.

Este projeto tem como objetivo fornecer uma biblioteca OpenPGP de código aberto em JavaScript para que possa ser usada em praticamente todos os dispositivos. Em vez de outras implementações que visam usar código nativo, o OpenPGP.js pretende contornar esse requisito (ou seja, as pessoas não precisarão instalar o gpg em suas máquinas para usar a biblioteca). A ideia é implementar todas as funcionalidades necessárias do OpenPGP em uma biblioteca JavaScript que possa ser reutilizada em outros projetos que forneçam extensões de navegador ou aplicativos de servidor. Deve permitir que você assine, criptografe, descriptografe e verifique qualquer tipo de texto - em particular e-mails - bem como gerencie chaves. (Tradução do conteúdo openpgpjs.org por Google Translate)

pgpjs
Fonte da imagem: https://openpgpjs.org/images/overview.png

Na tradução traz a seguinte sentença "qualquer tipo de texto". Se a aplicação não conseguir lidar com arquivos binários, é possível transformar as imagens em base64 antes de encriptá-las. Como escrevi, ainda não testei esta biblioteca.