Quando si realizza un sito Web capita spesso di aggiungere un controllo che permette all’utente di uploadare dei documenti.
Per caricare un file attraverso il sito Web utilizzo il controllo fileUpload di ASP.NET, ovviamente bisogna effettuare un controllo che verifica se il documento caricato appartiene ad un tipo consentito.
Innizialmente questo controllo veniva fatto sull’estensione del file, in seguito Luca mi ha fatto notare che un controllo del genere poteva essere aggirato facilmente in quanto basta cambiare l’estensione di un eseguibile (.exe) nell’estensione di un immagine (.jpg) ed il file verrebbe caricato senza problemi
.
Luca mi suggeriva di cambiare il controllo sul tipo di file aggiugendo la verifica del mime type oltre alla verifica dell’estensione del file.
Il controllo sul mime type può essere effettuato prima di fare l’upload del file mentre per verificare l’estensione devo prima caricare il file sul server, considerando che l’estensione di un file può essere modificata mentre il mime type no penso che sia sufficiente verificare solo il mime type.
Questo è il codice che verifica se il che effettua l’upload di un file e verifica che MIME TYPE del file caricato sia consentito:
protected void LinkButton1_Click(object sender, EventArgs e)
{
String path = "/Temp/";
if (FileUpload1.HasFile)
{
if (VerificaContentType(FileUpload1.PostedFile.ContentType))
{
fuDocumento.SaveAs(Server.MapPath(path) + FileUpload1.FileName);
literal1.Text = String.Empty;
}
else
{
FileUpload1.FileContent.Dispose();
Literal1.Text = "Attenzione: non è possibile caricare il documento.";
}
}
}
private bool VerificaContentType(String contentType)
{
List<tipiConsentiti> tipologie = GetTipologie();
int max = tipologie.Count;
bool trovato = false;
for (int i = 0; i < max && !trovato; i++)
{
if (tipologie .ContentType.ToLower() == contentType.ToLower())
{ trovato = true; }
}
return trovato;
}