2012-10-12 94 views
11

Tengo un formulario web disponible para el público, que tiene capacidad de carga de archivos. Ahora los archivos se guardan en el servidor web o se envían como archivo adjunto en un correo electrónico. Estamos restringiendo el tamaño, es decir, 15 MB y las extensiones de archivo que se cargan. Nuestro servidor SMTP está en el mismo servidor web. Me preocupa la seguridad, ya que cualquiera puede cargar archivos maliciosos y puede tener un impacto en nuestro servidor web de producción.Seguridad de carga de archivos Preocupación

¿Cuáles son los riesgos que tendré para el control de carga de archivos disponibles para el público? ¿Hay alguna forma de que alguien pueda ejecutar un script malicioso en el servidor web cargando un archivo malicioso?

hice algunas investigaciones y descubrí siguientes puntos

  1. Si envié un archivo como un archivo adjunto en un correo electrónico, este archivo se almacena durante un período temporal en carpetas temporales de ASP .NET, y una vez de correo electrónico se envía esto se borrará.
  2. Puede cambiar el nombre de un archivo antes de guardarlo en el sistema de archivos.
  3. Puede guardar el archivo en una ubicación diferente como su sitio web
  4. Puede tener algún tipo de control de virus en tiempo real. No estoy seguro de cómo puedes hacer eso. Estaba leyendo sobre un escaneo de virus de línea de comando. Pero no estoy seguro de si realmente necesito eso.

Estos son solo algunos puntos, pero me gustaría saber si hay algún punto ciego en la carga de archivos.

+0

En realidad, si lo envía como un archivo adjunto, nunca toca su disco. – SLaks

+1

Ni siquiera voy a tratar de responder, generalmente obtengo votos por no sugerir algo hermético. Hermético no tiene ninguna característica. Dicho esto, si coloca un web.config no válido o web.config con formato incorrecto en la carpeta de carga, puede evitar la ejecución de cualquier código .net. Debería asegurarse de estar bloqueando todas las extensiones que se asignan a algo que se ejecuta en su servidor, incluidos .php, .axd, .ashx, etc. – MatthewMartin

+2

Tenga cuidado de que su formulario no se convierta en un juguete favorito de los remitentes de correo no deseado. Limite a cuántas personas se puede enviar y con qué frecuencia, además de defender los riesgos del archivo. – AlG

Respuesta

6

Para responder a su pregunta sobre las posibles vulnerabilidades de seguridad, sí puede definitivamente crear vulnerabilidades en su aplicación y para sus usuarios, incluso si no guarda el archivo en el disco. Pero hay algunas líneas de defensa que puede tomar para validar.

La primera es, obviamente, para restringir los tipos de archivos que se pueden subir, se puede hacer esto con una lista blanca y un cheque de la extensión pero no se detienen allí. También debe verificar mirando el contenido del archivo para asegurarse de que cumpla con el formato esperado. Esto puede ser crítico ya que un mal tipo puede inyectar encabezados de archivos en el archivo cargado y usar su sistema como un zombi para pasar su malware.

En segundo lugar debe ejecutar un análisis de virus contra el archivo cargado, puede hacerlo utilizando una línea de comandos para ejecutar un escáner de virus local. Esto es algo fácil de hacer con muchos escaneos de virus, incluido Trend Micro, y a menos que esté mirando una gran cantidad de archivos cargados, entonces no debería ser un gran impuesto en su servidor.

Asegúrese de que nunca pase las rutas como datos enviados por el usuario (a través de GET o POST para descargar), ya que pueden exponerlo a un ataque de ruta de acceso. Si su usuario necesita descargar el archivo desde el navegador, puede crear una base de datos donde se almacenan los registros y luego crear un controlador o página que lo busque según el registro de la base de datos y los usuarios accedan a ese registro, en lugar de proporcionar un ruta que un usuario puede controlar y utilizar para obtener archivos de su servidor.

Asegúrese de que el directorio que se va a salvar es no es legible por el servidor web, de esta manera no subir un script malicioso y luego ejecutarlo desde su navegador a través de un HTTP

Asegúrese de validar toda la entrada del usuario contra alguna biblioteca anti-XSS (Microsoft proporciona uno http://www.microsoft.com/en-us/download/details.aspx?id=28589)

Espero que ayude!

4

La mejor manera es subirlos a la carpeta/App_Data o almacenarlos en una base de datos como objetos binarios. App_Data no es legible a través del servidor web, por lo que esto lo protegerá contra el acceso de ejecución y script. Una alternativa para almacenarlos en formato binario es codificarlos en Base 64 y almacenarlos en texto (nuevamente en el sistema de archivos App_Data o en la base de datos).

Cree una página proxy para verificar que el usuario tenga permisos para ver/descargar el archivo y, de ser así, envíe una secuencia del archivo a la respuesta HTTP. De esta forma, los usuarios no tienen acceso directo y no pueden ejecutar nada que no deberían. También puede adjuntar archivos utilizando las clases SMTP de una referencia de flujo.

Si almacena en el sistema de archivos puede implementar su propia convención de nomenclatura para que una solicitud del archivo real se asigne a la versión almacenada.

El análisis de virus puede ser útil, pero piense en esto como proteger a otros usuarios que pueden tener acceso para descargar el archivo en lugar de proteger su servidor.