Il caricamento del file non verifica il tipo mime

0

Quindi, ho una funzionalità di upload in cui l'estensione del tipo di file è stata verificata correttamente (e non è attualmente bypassabile). Ma il tipo MIME non è controllato. Questo mi lascia qualche rischio residuo o possibili "attacchi". Dove intendo gli attacchi in senso lato, in cui è possibile caricare un file che non avrebbe potuto essere caricato.

Sono particolarmente interessato al rischio per i miei utenti che possono scaricare file di altri utenti. Così un utente carica e l'altro lo scarica con il suo browser e lo apre sulla sua non più sicura macchina.

    
posta Wealot 14.11.2017 - 12:38
fonte

2 risposte

2

Il tipo mime non è integrato nel file in alcun modo. Si potrebbe anche dire che i file non hanno tipi mime. Certo, chiunque abbia creato il file potrebbe aver pensato che fosse di un certo tipo, ma su disco è ancora solo una stringa di uno e zero.

Il luogo in cui si incontrano i tipi MIME nel contesto del caricamento dei file si trova nelle intestazioni HTTP, sia quando il file viene caricato su di te che quando il file viene scaricato dagli utenti. Nota che un utente malintenzionato potrebbe provare a inviare qualsiasi file con un tipo MIME, corretto o errato.

A meno che il tuo software server non memorizzi esplicitamente il tipo mime, il client ha fornito che le informazioni verranno eliminate nel momento in cui la richiesta HTTP viene elaborata. Quindi, quando il file viene scaricato, il tuo server potrebbe benissimo dargli un tipo mime diverso (Apache, ad esempio, ne ricava uno dall'estensione del file).

Quindi, cosa significa questo per te?

Durante il caricamento, la whitelist sui tipi di mime non è importante quanto la whitelist sulle estensioni di file. L'estensione del file verrà conservata sul server e può influire sul modo in cui il file viene trattato (ad esempio, potrebbero essere eseguiti file PHP). Lo farei comunque, come ulteriore livello di sicurezza anche se il tipo MIME può essere facilmente falsificato.

Durante il download, devi assicurarti che il tuo server metta solo i tipi mime autorizzati "sicuri" nell'intestazione Content-Type . Ad esempio, non vuoi servire nulla come application/javascript dal momento che si aprirà per XSS. Ma ancora, le estensioni dei file sono altrettanto importanti. Per esempio. non serve nulla con estensioni exe anche se non permetti il tipo application/vnd.microsoft.portable-executable mime (a meno che tu non voglia che le persone siano in grado di caricare e scaricare gli eseguibili, ovviamente).

Il caricamento di file è complicato e ho cercato di concentrarmi su problemi relativi al tipo MIME qui. Si prega di non leggere questo come una guida completa - ci sono molte altre cose da considerare, a seconda del contesto.

    
risposta data 28.12.2017 - 10:16
fonte
0

Il tipo Mime e l'estensione sono facilmente modificabili dall'utente senza modificare il file sottostante. L'estensione rimane quando arriva al PC dell'utente, quindi il controllo di questo ha qualche merito in quanto determina quale applicazione lo apre all'estremità remota (comunque su Windows).

Il controllo del mimetype offre pochi vantaggi. Se vuoi andare oltre, controlla i numeri magici nei tipi di file più comuni.

    
risposta data 14.11.2017 - 12:42
fonte

Leggi altre domande sui tag