¿Por qué debería restringir el tipo de contenido de los archivos que se cargan en mi sitio?

9

Estamos creando una aplicación donde los usuarios pueden cargar hojas de vida en nuestro sistema para que nuestros administradores las descarguen. Estamos teniendo un debate sobre la restricción del tipo de contenido de los archivos que se pueden cargar.

Me está costando mucho reunir las preocupaciones de seguridad que tengo al permitir que se cargue cualquier tipo de contenido.

¿Existe el riesgo de seguridad de permitir que se cargue cualquier tipo de contenido?

    
pregunta Andy 09.02.2012 - 18:00
fuente

2 respuestas

9

Se debe tener en cuenta que un archivo no tiene un "tipo de contenido" inherente per se. Un archivo es un grupo de bytes y tiene un nombre. Cuando descarga un archivo desde un servidor web, el servidor infiere un tipo de contenido (como "aplicación / pdf") de cualquier pista que pueda encontrar, principalmente la llamada "extensión" (la pocas letras al final del nombre del archivo; por ejemplo, se supone que " .pdf " indica un archivo PDF) y, a veces, el contenido del archivo: por ejemplo, cuando un servidor web distribuye un archivo HTML, también se ve dentro del archivo encabezado para una etiqueta "meta" que anularía la opción predeterminada para Tipo de contenido, como este:

<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
</head>

Así que tienes dos operaciones en tu servidor: subir y descargar. La carga es mayormente segura: el archivo viene y se almacena. La descarga puede ser una preocupación: cuando un administrador descargará un archivo, lo hará haciendo clic en algún enlace dentro de un navegador web, y el servidor web deducirá un tipo de contenido, como se describe anteriormente. El navegador web utilizará el tipo de contenido para decidir qué hacer con el archivo descargado, y esto no necesariamente es "sugerir al usuario que lo guarde en algún lugar". Por ejemplo, si alguien carga un archivo .html , el navegador web lo interpretará como HTML, lo mostrará y posiblemente ejecutará cualquier Javascript que esté en él. Además, el archivo provendrá de su propio servidor, por lo que es probable que el navegador web del administrador confíe en ese archivo de forma predeterminada. Varias cosas desagradables pueden suceder en ese punto.

Por lo tanto, debe filtrar los tipos de contenido bajo los cuales servirá los archivos cuando se descarguen; y tenga en cuenta el nombre del archivo, ya que incluso si el archivo se guarda en el sistema del administrador, puede ser un archivo .exe que el administrador ejecutará al hacer clic en él.

Además, permitir que aparezca cualquier tipo de archivo en su servidor puede ser una herramienta indirecta para aprovechar un ataque. Hay algunos agujeros de seguridad en los que el atacante puede forzar de algún modo la ejecución de un archivo arbitrario en el servidor; un mecanismo de carga sin filtro permite al atacante empujar primero exactamente el tipo de archivo ejecutable que le gustaría ver ejecutado en el servidor.

    
respondido por el Tom Leek 09.02.2012 - 18:32
fuente
8

Normalmente, el problema no se debe a la carga, sino a hosting y problemas de origen / malware.

Imagina el siguiente escenario:

  1. Alice carga un archivo que se sirve desde https://example.com/alice/foo .
  2. Bob carga un archivo que se sirve desde https://example.com/bob/bar .
  3. Charlie descarga .../alice/foo , y luego descarga .../bob/bar .

Alice y Bob comparten un origen, https://example.com/ . Si el navegador solo trata los archivos como contenido estático, eso no presenta problemas. Pero si los archivos pueden contener scripts, entonces Alice podría almacenar las credenciales a través de cookies y Bob podría interceptar esas credenciales.

Muchos tipos de archivos pueden incrustar scripts: HTML, SVG, Flash, ..., etc. El alojamiento de contenido activo presenta todo tipo de problemas del mismo origen.

    
respondido por el Mike Samuel 09.02.2012 - 22:44
fuente

Lea otras preguntas en las etiquetas