2011-08-03 15 views
7

Busco una buena solución por el cual podemos evitar que un archivo exe para ser cargado en el servidor.cómo evitar que la carga de archivo exe en asp.net mvc

Será mejor si podemos descartar la carga con sólo leer los encabezados de los archivos tan pronto como las recibamos en lugar de esperar a que todo el archivo a subir.

ya he implementado la comprobación de extensión, en busca de una mejor solución.

+3

Los encabezados de archivo pueden estar falsificados. Comprueba los primeros dos bytes de los datos cargados. Si es 'MZ', es probable que tengas un ejecutable. –

+0

duplicado: http://stackoverflow.com/questions/3635128/validate-file-type-extension – Matthieu

Respuesta

7

Hay un cómo y una parte when/where. El cómo es bastante simple, ya que los archivos binarios contienen un encabezado y el encabezado es bastante fácil de quitar y verificar. Para archivos de Windows, puede verificar el artículo Executable-File Header Format. Se usan formatos similares para otros tipos binarios, por lo que puede determinar los tipos que permite y los que no.

NOTA: El artículo vinculado es para la consulta completa del archivo. Hay accesos directos baratos, descendentes y sucios donde solo se examinan algunos bytes.

El cuándo/dónde depende de cómo se obtienen los archivos. Si está utilizando una metodología muy abstracta (biblioteca de carga), que es bastante normal, puede que tenga que transmitir todo el archivo antes de poder comenzar a consultar los bits. Si se transmite en la memoria o si tiene que guardar y eliminar depende de su codificación y posiblemente incluso de la biblioteca. Si controla la transmisión, tiene la capacidad de transmitir en los primeros bytes (parte del encabezado) y abortar el proceso en mitad de la transmisión.

1

Creo que se puede hacer eso por un javascript comprobando si el archivo termina con .exe antes de presentar los datos y también hacer el lado servidor de comprobación.

2

El primer punto de acceso a los datos cargados estaría en una HttpModule. Técnicamente, puede verificar antes de enviar todos los bytes si tiene un .exe en sus manos y cancelar la carga. Puede ser bastante complicado dependiendo de qué tan lejos quieras tomar esto.

le sugiero que busque en el HttpModule de NeatUpload de Brettle. Tal vez le da una pista sobre cómo lidiar con esto en el nivel que desea.

Cuestiones relacionadas