FlawOpen

flawopen.com/XSS/Content-type sniffing

XSS por MIME sniffing: cómo la confusión MIME llega al navegador

Página de referencia
Respuesta breve

El navegador usa el Content-Type de la respuesta para decidir cómo procesar sus bytes. Si una aplicación sirve archivos controlados por usuarios con tipos ausentes o incorrectos, MIME sniffing puede hacer que algunas respuestas se comporten de forma distinta a la prevista. Envía el tipo correcto y X-Content-Type-Options: nosniff, y aísla las cargas del origen de la aplicación. El encabezado reduce un riesgo de interpretación del navegador; no sanea archivos ni sustituye los controles de carga.

Cómo una carga puede cruzar el límite del documento

Imagina que una aplicación acepta archivos y luego los sirve desde su propio origen autenticado con un Content-Type ausente o incorrecto. Si el navegador interpreta la respuesta como un documento HTML, el marcado del archivo puede activarse en el origen del sitio. Esto crea riesgo de XSS almacenado o confusión de contenido cuando alguien abre el archivo. La extensión y el tipo declarado en la solicitud de carga no demuestran el formato real de los bytes.

Declara el tipo y aísla las descargas

RIESGOSO — carga servida en línea con encabezados ambiguos
HTTP/1.1 200 OK
Content-Type: application/octet-stream
// sin X-Content-Type-Options
// mismo origen que la aplicación autenticada
MÁS SEGURO — tipo correcto, nosniff y descarga aislada
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
Content-Disposition: attachment; filename="download.txt"

Usa un Content-Type elegido por el servidor y acorde con los bytes; no copies el tipo indicado por quien sube el archivo. X-Content-Type-Options: nosniff desactiva MIME sniffing para respuestas de documento y bloquea solicitudes de script o stylesheet con MIME incorrecto. No es una solución universal de XSS: sirve las cargas desde otro origen, prefiere Content-Disposition: attachment para descargas y aplica límites de tamaño, autorización y validación de archivos. Para imágenes u otros medios en línea, devuelve el tipo verificado y prueba la respuesta real en el navegador.

Preguntas frecuentes

¿nosniff hace seguro servir cualquier archivo subido?

No. Controla la interpretación MIME del navegador y las comprobaciones de scripts y hojas de estilo, pero no valida ni sanea archivos, no corrige un Content-Type incorrecto ni aísla cargas del mismo origen. Usa otro origen y descargas como adjuntos para archivos no confiables.

Referencias

Véase también Cross-Site Scripting (XSS, CWE-79): cómo funciona y cómo evitarlo en cada lenguaje — flawopen.com CSP y escape de salida: ¿necesitas ambos? ¿Es seguro dangerouslySetInnerHTML en React? ¿DOMPurify basta para proteger innerHTML? ¿Markdown es seguro frente a XSS? ¿Svelte protege contra XSS por defecto? ¿La carga de SVG implica riesgo de XSS?