2012-08-10 46 views
6

Me gustaría tener una lista blanca de tipos de archivos que los usuarios están autorizados a cargar a mi servidor IIS (estoy usando IIS v7.5).Cómo restringir/validar archivos subir tipos de archivos del lado del servidor en IIS

¿Cuáles son las opciones que tengo? Por ejemplo, para restringir el tamaño del archivo de 5 MB para una acción específica en mi controlador, he añadido esta sección para mi 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> 

¿Hay una opción en el webconfig para configurar una lista blanca de tipos de archivo permitidos? ¿O la única opción es validar los tipos de archivos en el código cuando el archivo está completamente cargado? ¿Cuál es la técnica recomendada? ¿Cómo puedo estar seguro de que el .docx, .pdf, .jpg, etc. son realmente lo que son?

+0

¿Hay alguna razón para no validarlo en el lado del cliente? –

+1

porque no todos los navegadores admiten esta característica y también porque todo debe validarse del lado del servidor. –

+0

@AlexandreJobin ¿cómo de seguro quieres que el archivo ES lo que el usuario dice que es? – Jared

Respuesta

3

Como quiera que esté del lado del servidor, podría usar los archivos de tipo MIME.

THIS post muestra cómo determinar el tipo MIME en función del contenido de los archivos (en lugar de por la extensión).

Si desea limitar la entrada a la extensión de archivo ESPECÍFICO, puede simplemente verificar el nombre de la entrada con respecto a lo que desea aceptar.Si esto sucede, podría hacer una referencia externa contra la biblioteca en la publicación que he vinculado para asegurarse de que el usuario no solo modifique la extensión del archivo.

Hacer esto proporcionaría un grado bastante bueno de certeza de que el archivo es uno que desea aceptar!

EDITAR: Basado en los comentarios hasta el momento .... De acuerdo con lo que ha dicho que está buscando, este método debería funcionar bastante bien para usted. Mi sugerencia es si simplemente desea limitarla a los tipos de archivos enumerados en uno de sus comentarios ... Haga una simple comprobación de la extensión del archivo. Si eso es válido, pase el archivo al urlmon.dll que figura en el enlace. Asegúrese de que no vuelva como un tipo no válido ... también conocido como ejecutable/java/zip/etc. Si no es un tipo no válido, entonces tendrá un alto grado de certeza de que es un archivo seguro.

Por último, al leer los comentarios de esa publicación, parece que urlmon.dll podría admitir implícitamente todos los tipos de archivos que desee, lo que eliminaría la necesidad de comprobar que no es un ejecutable o algo de esa naturaleza, pero necesitaría confirmar que doc/docx/xsl/xslx devuelve un tipo de mime válido.

0

datos Anotations es lo que buscas, aquí es una búsqueda que puede ayudar a usted, google data anotaions

actualización

Creo que valida fuera de extensiones de archivo. Si no quiere confiar en file extensions, creo que su mejor opción es validar fuera de MIME types. Esto es más complejo y varía de navegador a navegador, y puede ser falso (aunque esto es más complejo que falsificar una extensión).

Una opción simple pero no gratuita es usar Telerik RadAsyncUpload.

Puede escribir este código usted mismo (aunque nunca me he equivocado) this puede comenzar. (Esta publicación trata sobre el hecho de que no se pueden detectar de manera confiable los tipos de mime sin IIS, pero debería ayudarte a avanzar).

Espero que esto te ayude a avanzar. Como sabe, puede restringir los archivos por su tamaño, validarlos por sus extensiones y, si agrega validación por tipos MIME, creo que ha hecho todo lo posible. Creo que esto es todo lo que puede hacer para estar seguro y no excluir archivos válidos; aunque he oído hablar de hashing el archivo y algunas otras opciones; pero estos excluirán definitivamente archivos legítimos.

Además, como mencioné, los tipos MIME pueden ser falsos y enviados a su servidor, para estar más seguro debe validar tanto del lado del cliente como del servidor.

+0

¿Verificarán los datos la anotación de datos? de un archivo o simplemente verificar la extensión de los archivos? – Jared

+0

@Jared ver mi actualización. –

+0

El RadAsyncUpload filtrará en la extensión de archivo así que esto es algo que puedo hacer fácilmente por mi parte del lado del servidor y también del lado del cliente. Estaba usando la versión MVC de sus controles :) –

1

No, no hay configuración de web.config para restringir lo que se carga. La única forma posible de validar los datos cargados es validar esos datos en código.

Incluso si hubiera una configuración, de todos modos sería inútil porque se basaría en los encabezados Content-Type recibidos del cliente, lo que puede ser bastante incorrecto.

En el código, sin duda puede mirar el encabezado Content-Type, pero si está tratando de validar que los datos cargados son de un tipo específico, tendrá que hacerlo manualmente, en función de qué tipo de información que está esperando. Para una imagen, esto es fácil. Para otros tipos de archivos, puede ser mucho más difícil.

+0

Entonces, ¿cuál sería su técnica para validar el archivo? ¿Conoces una buena biblioteca que pueda validar el tipo real del archivo? –

+0

Depende del archivo. No existe una solución mágica para validar todos los tipos de archivos. ¿Con qué tipo de archivo estás tratando de trabajar? – dodexahedron

+0

Para mi proyecto real, necesito validar las imágenes de pdf, doc, docx, xls, xlsx. No tendré ningún video o audios. Solo documentos imprimibles –

Cuestiones relacionadas