El tipo mime no está integrado en el archivo de ninguna manera. Incluso se podría decir que los archivos no tienen tipos mime. Claro, quienquiera que haya creado el archivo puede tener la intención de que sea de un determinado tipo, pero en el disco es solo una cadena de unos y ceros.
El lugar donde se encuentran los tipos mime en el contexto de la carga de archivos se encuentra en los encabezados HTTP, tanto cuando el archivo se carga a usted como cuando el archivo es descargado por sus usuarios. Tenga en cuenta que un atacante podría intentar enviar cualquier archivo con cualquier tipo de mime, correcto o incorrecto.
A menos que el software de su servidor no almacene explícitamente el tipo mime que el cliente proporcionó, esa información desaparecerá en el momento en que se procese la solicitud HTTP. Entonces, cuando se descarga el archivo, su servidor puede darle un tipo mime diferente (Apache, por ejemplo, deriva uno de la extensión del archivo).
Entonces, ¿qué significa esto para ti?
Durante la carga, la lista blanca de tipos mime no es tan importante como la lista blanca de extensiones de archivo. La extensión del archivo se conservará en el servidor y puede afectar la forma en que se trata el archivo (por ejemplo, los archivos PHP pueden ejecutarse). Sin embargo, todavía lo haría, como una capa adicional de seguridad, aunque el tipo mime se puede falsificar fácilmente.
Durante la descarga, debe asegurarse de que su servidor solo coloque tipos de mimos en la lista blanca "seguros" en el encabezado Content-Type
. Por ejemplo, no quieres servir nada como application/javascript
ya que eso se abriría para XSS. Pero de nuevo, las extensiones de archivo son igual de importantes. P.ej. no sirva nada con una extensión exe, incluso si no permite el tipo application/vnd.microsoft.portable-executable
mime (a menos que desee que la gente pueda subir y descargar ejecutables, por supuesto).
La carga de archivos es complicada, y aquí he tratado de centrarme en los problemas relacionados con el tipo mime. Por favor, no lea esto como una guía completa, hay muchas más cosas a considerar, dependiendo de su contexto.