2010-10-26 11 views
7

Voglio convalidare il tipo di file per assicurarmi che l'utente stia caricando un'immagine di tipo JPEG, GIF o PNG. Invece di controllare l'estensione del file, ho pensato che l'utilizzo di HttpPostedFile.ContentType sarebbe stato più sicuro dal momento che controlla il tipo di contenuto MIME.HttpPostedFile.ContentType è un modo impeccabile per convalidare un file caricato?

protected void cvValidateImageType_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    if (fupImage.HasFile) 
    { 
     args.IsValid = (fupImage.PostedFile.ContentType.ToLower() == "image/jpg" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/jpeg" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/pjpeg" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/gif" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/x-png" || 
         fupImage.PostedFile.ContentType.ToLower() == "image/png"); 

    } 
    else 
     args.IsValid = true; 
} 

È un modo impeccabile per controllare il tipo di file o può essere ingannato?

risposta

6

L'utilizzo dell'estensione è probabilmente più sicuro. ContentType viene inviato nella richiesta http dal client. Se provi per l'estensione, l'utente può modificare l'estensione di un exe in jpg, ma non verrà eseguito come un exe.

4

Sia l'estensione che le intestazioni HTTP sono ugualmente inaffidabili, in quanto entrambe possono essere simulate con facilità, sia da un utente malintenzionato che utilizza richieste HTTP non elaborate, sia da un innocente utente del browser che seleziona un file con nome errato. Se vuoi essere sicuro, devi aprire il file e analizzare il contenuto, non c'è altro modo.

Problemi correlati