Mcatorce Suite
← Volver al blog

Corrige los Errores de Content-Type Incorrecto y Valida las Subidas de Archivos con Seguridad

Cómo diagnosticar archivos que se descargan en lugar de mostrarse, scripts bloqueados por comprobaciones MIME y cómo validar subidas por su contenido en lugar de confiar en el tipo.

Prueba la herramienta: Búsqueda de Tipos MIME

Los tipos MIME incorrectos causan algunos de los problemas más desconcertantes del trabajo web: una página muestra texto sin procesar, una fuente no carga, una descarga tiene el nombre equivocado. Arreglarlos es sobre todo cuestión de configuración.

Síntoma: el navegador descarga en lugar de mostrar

Probablemente el servidor envía application/octet-stream o un tipo erróneo. Establece el tipo correcto para la extensión, como application/pdf para PDF o image/webp para imágenes WebP, y comprueba que ningún proxy lo sobrescriba.

Síntoma: se rechaza un script u hoja de estilos

La consola puede decir que un script se bloqueó por una discrepancia de tipo MIME. Los módulos necesitan un tipo de JavaScript, y con nosniff activado el navegador no adivina. Asegúrate de que el servidor asigne bien .js, .mjs y .css. Una causa habitual es que se sirva una página de error (text/html) para un archivo inexistente, que el navegador se niega a ejecutar como script.

Síntoma: fallan fuentes o WebAssembly

Los tipos de archivo más nuevos como .woff2, .wasm y .webmanifest pueden faltar en una configuración antigua del servidor. Añádelos: font/woff2, application/wasm, application/manifest+json.

Dónde configurarlo

Los alojamientos estáticos y los servidores web tienen una tabla de tipos MIME o un archivo de cabeceras. Los frameworks de aplicaciones suelen fijar la cabecera al devolver una respuesta, así que establécela de forma explícita para descargas y APIs.

Validar las subidas

El tipo que informa un navegador para un archivo subido viene del cliente, así que un atacante puede cambiarlo. Una validación más segura:

  1. Comprueba la extensión con una lista de permitidos.
  2. Inspecciona los primeros bytes del archivo, llamados números mágicos, para confirmar el formato real. Un PNG empieza con 89 50 4E 47 y un PDF con %PDF.
  3. Recodifica las imágenes en el servidor, lo que elimina cargas ocultas.
  4. Guarda las subidas fuera de la raíz web o con un tipo seguro, y sirve con Content-Disposition: attachment cuando no deban ejecutarse.
  5. Limita el tamaño del archivo.

Preguntas frecuentes

¿Puedo fiarme del atributo accept? Solo ayuda a los usuarios a elegir archivos. No es un control de seguridad.

¿Por qué recibo text/plain para un archivo JSON? El servidor asigna por extensión, y puede no conocer .json o estar configurado con un valor por defecto.