Sniffing dei contenuti. La tua proposta non è sufficiente: sarà vulnerabile agli attacchi di sniffing dei contenuti. Ho scritto altrove sulle strategie per prevenire gli attacchi di sniffing dei contenuti . Ci sono una varietà di difese. Ecco i principali:
-
Includi un'intestazione Content-Type:
nella risposta. Assicurati che includa un tipo MIME valido (evita tipi MIME non validi).
-
Includi un'intestazione X-Content-Type-Options: nosniff
nella risposta. Questo spegnerà gli algoritmi di content-sniffing di IE, sulle versioni recenti di IE.
-
Se non desideri che il contenuto venga visualizzato nel browser, può aiutare a impostare Content-Disposition: attachment
, in modo che il browser lo tratti come un download di file.
Anche questi passaggi non sono garantiti per essere sufficienti. Ad esempio, se l'utente utilizza IE6, sarà comunque vulnerabile.
(Se ti sembra fastidioso, hai ragione, incolpati gli utenti di Apache per aver incluso una configurazione di default scadente che ha infranto gli standard web per molti anni e ignorato le richieste di fare qualcosa al riguardo. Purtroppo, ormai è troppo tardi: siamo bloccati con una grande base di browser che fa cose pericolose.)
Dominio separato. Una difesa migliore è quella di ospitare il contenuto fornito dall'utente in un dominio separato, che viene utilizzato solo per il contenuto caricato dall'utente. In questo modo, un attacco di successo per il contenuto non può attaccare il contenuto del tuo sito. Il caricamento di un utente può ancora attaccare i caricamenti di altri utenti, ma potrebbe essere tollerabile.
Controlla la tua lista bianca. Sembra che tu pensi che i file PDF e Word siano innocui. Tuttavia, questi sono due formati di file potenti e pericolosi. PDF è noto per essere un vettore. I file PDF dannosi abbondano e possono penetrare con successo in molti vecchi visualizzatori di PDF. Il rischio PDF è così elevato che Chrome prende precauzioni speciali prima di consentirti di scaricare e visualizzare un documento PDF nel tuo visualizzatore PDF. Word è anche un formato di file potente e pericoloso, che può essere un host per gli attacchi. Per questo motivo, non considererei innocuo Word o PDF.
Potresti essere in grado di reindirizzare gli utenti a Google Documenti, per visualizzare il file Word / PDF nel browser tramite Google Documenti. Google convertirà il file Word / PDF in HTML e poi lo invierà al browser del visualizzatore. Questo può o non può essere accettabile nelle tue circostanze.
Scansiona i caricamenti di file per i virus. Ti consiglio di eseguire la scansione di tutti i contenuti caricati dagli utenti per i virus, utilizzando alcuni virus o scanner di malware. Per i file PDF, vedi anche Come eseguire la scansione di un PDF per malware? . Potresti voler eseguire la scansione del caricamento immediatamente quando viene caricato. Potresti anche considerare di riesaminare periodicamente i file più vecchi (questo potrebbe rilevare alcuni malware che non erano stati rilevati in precedenza, poiché le definizioni di antivirus / malware sono state aggiornate).
Ulteriori informazioni. Vedi anche Elenco di controllo di Mozilla per i caricamenti di file , nella loro versione sicura standard di codifica. È un bel elenco di buone pratiche di sicurezza.
Riepilogo. In sintesi, la difesa più potente ed efficace che puoi utilizzare è quella di posizionare il contenuto caricato dall'utente su un dominio separato. Quindi, come protezione aggiuntiva, potresti prendere in considerazione le altre difese elencate qui.
Aggiornamento: ho appena saputo di un altro problema con il tuo schema. A quanto pare, Flash ignora l'intestazione Content-Type , che potrebbe consentire il caricamento di un SWF dannoso, che può quindi fare tutto ciò che fare con un XSS. (Sigh, stupido Flash.) Sfortunatamente, nessuna quantità di whitelisting può fermare questo attacco. Di conseguenza, sembra che l'unica soluzione sicura sia ospitare il contenuto caricato dall'utente su un dominio separato.