Perché dovrei limitare il tipo di contenuto dei file da caricare sul mio sito?

9

Stiamo costruendo un'applicazione in cui gli utenti possono caricare i curriculum nel nostro sistema affinché i nostri amministratori possano scaricare. Stiamo discutendo di limitare il tipo di contenuto dei file che possono essere caricati.

Sto avendo difficoltà a rimettere insieme esattamente i problemi di sicurezza che ho con il permettere di caricare qualsiasi tipo di contenuto.

Esiste il rischio per la sicurezza di consentire il caricamento di qualsiasi tipo di contenuto?

    
posta Andy 09.02.2012 - 18:00
fonte

2 risposte

9

Va notato che un file non ha un "tipo di contenuto" intrinseco di per sé. Un file è un mucchio di byte e ha un nome. Quando si scarica un file da un server Web, il server deduce un tipo di contenuto (come "application / pdf") da qualunque indizio possa trovare, principalmente la cosiddetta "estensione" (il poche lettere alla fine del nome del file, ad esempio " .pdf " si presume che indichi un file PDF) ea volte il contenuto del file stesso: ad esempio, quando un server Web distribuisce un file HTML, appare anche all'interno del file intestazione per un tag "meta" che sostituisce la scelta predefinita per Content-type, come questo:

<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
</head>

Quindi hai due operazioni sul tuo server: carica e scarica. Il caricamento è quasi sicuro: il file viene e viene memorizzato. Il download può essere una preoccupazione: quando un amministratore scarica un file, lo fa facendo clic su un collegamento all'interno di un browser Web e il server Web dedurrà un tipo di contenuto, come descritto sopra. Il browser Web utilizzerà quindi il tipo di contenuto per decidere cosa fare con il file scaricato, e questo potrebbe non essere necessariamente "suggerire all'utente di salvarlo da qualche parte". Ad esempio, se qualcuno carica un file .html , il browser Web lo interpreterà come HTML, lo visualizzerà e probabilmente eseguirà qualsiasi cosa sia Javascript. Inoltre, il file verrà dal tuo server, quindi è probabile che il browser Web dell'amministratore si fidi di tale file per impostazione predefinita. A quel punto possono accadere varie cose brutte.

Quindi dovresti filtrare i tipi di contenuto sotto i quali ti serviranno i file quando scaricati; e attenzione anche al nome del file, perché anche se il file è stato appena salvato sul sistema dell'amministratore, potrebbe comunque essere un file .exe che verrà eseguito dall'amministratore quando si fa clic su di esso.

Inoltre, consentire a qualsiasi tipo di file di apparire sul tuo server potrebbe essere uno strumento indiretto per sfruttare un attacco. Ci sono alcuni buchi di sicurezza in cui l'attaccante può in qualche modo forzare l'esecuzione di un file arbitrario sul server; un meccanismo di upload non filtrato consente all'utente malintenzionato di inserire prima esattamente il tipo di file eseguibile che vorrebbe vedere eseguito sul server.

    
risposta data 09.02.2012 - 18:32
fonte
8

In genere il problema non è dovuto al caricamento, ma a problemi di hosting e di origine / malware.

Immagina il seguente scenario:

  1. Alice carica un file che viene pubblicato da https://example.com/alice/foo .
  2. Bob carica un file che viene pubblicato da https://example.com/bob/bar .
  3. Charlie scarica .../alice/foo e in seguito scarica .../bob/bar .

Alice e Bob condividono un'origine, https://example.com/ . Se i file vengono trattati dal browser come contenuto statico, non si presentano problemi. Ma se i file possono contenere script, Alice potrebbe memorizzare le credenziali tramite i cookie e Bob sarebbe in grado di intercettare tali credenziali.

Molti tipi di file possono incorporare script - HTML, SVG, Flash, ..., ecc. L'hosting di contenuti attivi introduce tutti i tipi di problemi con la stessa origine.

    
risposta data 09.02.2012 - 22:44
fonte

Leggi altre domande sui tag