Protezione dei file confidenziali caricati [chiuso]

1

Abbiamo un'applicazione web in Linux (App A) usando PHP e Zend e un'altra in Windows usando Asp.net C # (App B). Entrambi accedono allo stesso database. L'App B è solo per uso interno, mentre l'App A può essere utilizzata per accedere all'esterno della nostra rete.

Abbiamo ricevuto una richiesta per consentire il caricamento di file da entrambe le applicazioni e dovrebbe anche essere accessibile da entrambi i lati. Il file conterrà le informazioni personali quindi dovrebbe essere riservato e protetto il più possibile.

Stiamo considerando di archiviare i file nel database perché è più semplice da implementare data la situazione attuale in cui le app risiedono in server con SO diverso.

Come possiamo almeno aggiungere un livello di sicurezza (ad esempio la crittografia) alle nostre applicazioni in modo che il file sia accessibile solo agli utenti approvati?

Come possiamo proteggere i file dagli attacchi?

[UPDATE 2015-07-10]

Ci siamo resi conto dell'effetto a lungo termine del salvataggio dei dati nel database, quindi stiamo pensando di salvarlo su un file server invece

    
posta artsylar 09.07.2015 - 04:23
fonte

3 risposte

2

Esistono numerose domande con risposte su questo sito e anche Linee guida Owasp che coprono i rischi di consentire il file upload e come archiviare i file correttamente.

Potresti voler controllare la legislazione applicabile alla tua applicazione e intraprendere le azioni necessarie per archiviare i file di conseguenza ( crittografia, diritti di accesso, integrità dei dati, registrazione ).

Per quanto riguarda la tua idea di archiviare i file nel database, penso che causerà un sacco di stress (oltre al sovraccarico di archiviazione) ai tuoi server. È più conveniente archiviare i file al di fuori della radice Web con ACL (controllo dell'accesso) e possibilmente crittografia.

Il database può essere utile per memorizzare metadati e diritti di accesso per gli utenti delle applicazioni web.

È possibile condividere i file tra server / applicazioni in modo sicuro utilizzando protocolli standard come rsync o anche https .

Potresti anche prendere in considerazione la possibilità di scansionare i file caricati per i tentativi di malware e fuzzing .

Scopri quali sono i tuoi requisiti , controlla la legislazione e produci una panoramica su come dovrebbe funzionare la tua soluzione e quali precauzioni stai prendendo. Quindi consulta un consulente / esperto e rivedi.

    
risposta data 09.07.2015 - 10:42
fonte
1

Alasjo ha già fornito una buona risposta, ma penso che alcune informazioni aggiuntive potrebbero aiutarti a comprendere le difficoltà che hai e come affrontarle.

Nella tua domanda hai suggerito la crittografia. La sola crittografia dei dati caricati non può essere sufficiente per proteggerli. Poiché i dati crittografati sono inutili senza un mezzo per decrittografarli, l'applicazione dovrebbe fornire un modo per decrittografarli. Se l'utente malintenzionato è in grado di impersonare un utente con diritti di accesso ai dati, potrebbe consentire alla tua applicazione di decrittografarlo per lui. Questo problema è ancora maggiore se tutti gli utenti collegati al tuo sistema possono accedere ai dati caricati.

Ciò di cui hai veramente bisogno è un buon processo di autenticazione combinato con una buona autorizzazione (gestione dei diritti di AKA):

1) L'autenticazione serve a garantire che nessuno stia usurpando l'identità di un utente legittimo. Puoi iniziare assicurando che l'utente stia utilizzando password difficili da indovinare (ad esempio utilizzando zxcvbn ) e NON richiedendo che lo modificino regolarmente (gli svantaggi sono molto maggiori dei benefici). Dovresti quindi seguire la guida di OWASP sull'autenticazione.

2) L'autorizzazione è garantire che l'utente possa accedere solo ai dati a cui ha diritto. Ci sono molti modi per definire e controllare i diritti, e dovresti fare attenzione a separarli dai concetti. Di solito viene seguito il modello RBAC , ma l'applicazione potrebbe richiedere un controllo più preciso, quindi scegli saggiamente. RBAC consiste nel mettere l'utente nel gruppo s (o ruoli) e dare diritti ai gruppi (e non agli utenti). Nel tuo caso puoi consentire solo l'uploader e il destinatario dei dati caricati per accedervi. Il destinatario può essere implicitamente un gruppo. OWASP ha anche una lista di controllo per l'autorizzazione .

Puoi crittografare i dati caricati, ma non aspettarti di ottenere un significativo aumento della sicurezza da esso. Spiegare come farlo correttamente richiederebbe un'altra risposta o guida. Ovviamente, i processi di caricamento e download stessi devono essere protetti utilizzando TLS.

Non dimenticare di seguire i consigli forniti da Alasjo anche nella sua risposta.

    
risposta data 10.07.2015 - 09:56
fonte
0

Penso che la finestra mobile sia una possibile soluzione per questo. Non sono un esperto di Docker. Quindi questa è una soluzione idea di concetto.

Penso che potresti creare alcuni contenitori per il database e fare il fico. Ad esempio, crea 3 contenitori (1-master, 1-interno e 1-webapp) con ciascuno lo stesso database. Quindi potresti farli scansionare prima di sincronizzarli per evitare conflitti, malware, ecc.

Con il boot2docker puoi distribuire con Linux, MAC o Windows, il che avrebbe senso dal momento che hai Linux e Windows che accedono entrambi al database.

Docker ha alcuni strumenti già integrati che potrebbero aiutarti a iniziare. In questo modo puoi fare tutto ciò che vuoi nei contenitori (ad esempio Crittografare, ACL, ecc.) Così puoi controllare ciascun database separatamente, proteggerli in modo indipendente.

Ancora una volta, questo è inteso solo come un suggerimento di concetto.

link

    
risposta data 10.07.2015 - 06:08
fonte

Leggi altre domande sui tag