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.