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.