È sicuro memorizzare le immagini caricate come dati blob nel database?

1

Sto scrivendo un'applicazione web Java e sto cercando di prevenire le vulnerabilità del caricamento dei file memorizzando le immagini del profilo caricate come blob nel database. È sicuro conservare le immagini caricate in un database in un database per impedire:

  1. Esecuzione dei file con possibili vulnerabilità LFI?
  2. Accesso ai file di altri utenti con path traversal?

È possibile eseguire un file quando si tenta di servire l'immagine quando si recupera il file dal database? Posso introdurre nuove vulnerabilità con il blobbing?

Sto pensando di rappresentare l'immagine nel seguente modo:

<img src="/path/to/servlet?userID=1"/>

Uso MySQL come sistema di gestione dei database e Glassfish come server web su Windows Server 2012 R2.

    
posta AXANO 22.10.2017 - 01:25
fonte

2 risposte

2

Posso immaginare un paio di possibili vulnerabilità che dovresti tenere a mente:

  • Sovraccarico dei dati caricati - se non esiste un modo per limitare la dimensione dei caricamenti, il server potrebbe essere danneggiato inviandogli un file molto grande.
  • Accesso fuori dai limiti, dal momento che stai permettendo all'immagine di essere servita dal database che stai permettendo l'accesso in lettura al database, se un indice è usato per accedere all'immagine può essere possibile accedere ad altre posizioni nel DB, allo stesso modo se la lettura consente la lettura incrementale è possibile ricevere richieste di lettura che prelevano dati dall'esterno del blob.

Dovresti controllare il server & BD ha messo in atto test per prevenire tali attacchi / comportamenti scorretti.

    
risposta data 22.10.2017 - 10:31
fonte
0

Can a file be executed when trying to serve the image when retrieving the file from the database?

Il modo più sicuro è di non aprire le immagini caricate nel file system del server, un modo per fare una pratica sbagliata è creare un file temporaneo per servire l'immagine.

Invece, mantieni l'elaborazione delle immagini tra Servlet e il client servendo i dati binari dell'immagine direttamente dal database.

byte[] content = resultSet.getBytes("content");
response.getOutputStream().write(content);

Cioè, se si mantiene il file immagine fuori dal file system qualsiasi potenziale minaccia che si trova all'interno non verrà attivata.

    
risposta data 22.10.2017 - 13:39
fonte

Leggi altre domande sui tag