2012-08-10 15 views
6

Vorrei avere una whitelist di tipi di file che gli utenti sono autorizzati a caricare sul mio server IIS (im utilizzando IIS v7.5).Come limitare/convalidare i file di file di caricamento del file lato server su IIS

Quali sono le opzioni che ho? Ad esempio, per limitare la dimensione del file a 5 MB per un'azione specifica in mio controller, ho aggiunto questa sezione per la mia WebConfig:

<location path="home/fileupload"> 
    <system.web> 
    <!-- maxRequestLength is in kilobytes (KB) --> 
    <httpRuntime maxRequestLength="5120" /> <!-- 5MB --> 
    </system.web> 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <!-- maxAllowedContentLength is in bytes --> 
     <requestLimits maxAllowedContentLength="5242880"/> <!-- 5MB --> 
     </requestFiltering> 
    </security> 
    </system.webServer> 
</location> 

C'è un'opzione nella WebConfig per impostare una whitelist di Tipi di file ammessi? O è l'unica opzione è quella di convalidare i filetypes nel codice quando il file è completamente caricato? Qual è la tecnica consigliata? Come posso essere sicuro che il .docx, .pdf, .jpg, ecc. Siano davvero quello che sono?

+0

C'è un motivo per non convalidarlo dal lato client? –

+1

perché questo non è tutti i browser che supportano questa funzionalità e anche perché tutto dovrebbe essere convalidato lato server comunque! –

+0

@AlexandreJobin quanto è certo che il file sia ciò che l'utente sta dicendo? – Jared

risposta

3

Dal momento che si desidera lato server, è possibile utilizzare il tipo di file MIME.

THIS post mostra come determinare il tipo MIME in base al contenuto dei file (anziché dall'estensione).

Se si desidera limitare l'input all'estensione di file SPECIF si può semplicemente controllare il nome di input rispetto a ciò che si desidera accettare.Se questo passa potresti fare un xrif contro la libreria nel post che ho collegato per assicurarti che l'utente non abbia semplicemente cambiato l'estensione del file su di te.

Fare ciò fornirebbe un grado abbastanza elevato di certezza che il file è uno che si desidera accettare!

MODIFICA: Basato su commenti finora .... Sulla base di ciò che hai detto stai cercando questo metodo dovrebbe funzionare abbastanza bene per te. Il mio suggerimento se vuoi semplicemente limitarlo ai tipi di file elencati in uno dei tuoi commenti ... Fai un semplice controllo sull'estensione del file. Se ciò è valido, passare il file allo urlmon.dll elencato nel collegamento. Assicurati che non ritorni come un tipo non valido .... alias Executable/java/zip/etc. Se non è un tipo non valido, avrai un grado molto alto di certezza che si tratta di un file sicuro!

Infine, leggendo attraverso i commenti su quel post sembra che lo urlmon.dll possa supportare tutti i tipi di file che si desidera implicitamente, eliminando la necessità di verificare che non sia un eseguibile o qualcosa del genere, ma tu dovrebbe confermare che doc/docx/xsl/xslx restituiscono un tipo mime valido.

0

dati anotations è quello che stai cercando, ecco una ricerca che può aiutare, google data anotaions

Aggiornamento

Penso che convalida fuori di estensioni di file. Se non vuoi fare affidamento su file extensions, penso che la cosa migliore da fare sia convalidare su MIME types. Questo è più complesso e varia da browser a browser e può essere simulato (anche se è più complesso di fingere un'estensione.)

Un'opzione semplice ma non libera è quella di utilizzare Telerik RadAsyncUpload.

Si potrebbe scrivere questo codice da soli (anche se non ho mai scherzato con esso) this potrebbe iniziare. (questo post riguarda il fatto che non è possibile rilevare in modo attendibile i tipi di mime senza IIS, ma dovrebbe farti andare per la tua strada.)

Speriamo che questo ti guiderà. Come sai, puoi limitare i file in base alla loro dimensione, convalidare con le loro estensioni e, se aggiungi la convalida tramite i tipi MIME, penso che tu abbia fatto tutto il possibile. Penso che questo sia tutto ciò che puoi fare per essere sicuro e non escludere file validi; anche se ho sentito di hashing del file e alcune altre opzioni; ma questi escluderanno in modo provocatorio i file legit.

Inoltre, come ho già detto, i tipi MIME possono essere falsi e inviati al server, per garantire la massima sicurezza, è necessario convalidare sia lato client che lato server.

+0

L'annotazione dei dati controlla la validità di un file o semplicemente controllare l'estensione dei file? – Jared

+0

@Jared vedere il mio aggiornamento. –

+0

RadAsyncUpload filtrerà sull'estensione del file, quindi questo è qualcosa che posso fare facilmente da solo sul lato server e sul lato client. Stavo usando la versione MVC dei loro controlli :) –

1

No, non esiste alcuna impostazione web.config per limitare ciò che viene caricato. L'unico modo possibile per convalidare i dati caricati è di convalidare effettivamente quei dati nel codice.

Anche se ci fosse un'impostazione, sarebbe comunque inutile perché sarebbe basata sulle intestazioni Content-Type ricevute dal client, il che può essere abbastanza sbagliato.

Nel codice, è possibile guardare l'intestazione Content-Type, ma se si sta tentando di verificare che i dati caricati siano di un tipo specifico, è necessario farlo manualmente, in base a quali tipo di dati che ti aspetti Per un'immagine, questo è facile. Per altri tipi di file, può essere molto più difficile.

+0

Quindi quale sarebbe la tua tecnica per convalidare il file? Conosci una buona libreria in grado di convalidare il vero tipo del file? –

+0

Dipende dal file. Non esiste una soluzione magica per convalidare tutti i tipi di file là fuori. Con che tipo di file stai cercando di lavorare? – dodexahedron

+0

Per il mio progetto attuale, ho bisogno di convalidare pdf, doc, docx, xls, xlsx, immagini. Non avrò video o audio. Solo documenti stampabili. –

Problemi correlati