flawopen.com/XSS/Content-type sniffing
XSS por MIME sniffing: cómo la confusión MIME llega al navegador
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
HTTP/1.1 200 OK Content-Type: application/octet-stream // sin X-Content-Type-Options // mismo origen que la aplicación autenticada
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
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
- MDN — encabezado de respuesta X-Content-Type-Options
- Estándar Fetch WHATWG — X-Content-Type-Options
- OWASP — encabezados de seguridad HTTP