DICCIONARIO · X

X-Content-Type-Options

X-Content-Type-Options es una cabecera HTTP de seguridad que, con su único valor nosniff, obliga al navegador a respetar el tipo de archivo (MIME) que declara el servidor en lugar de adivinarlo por su contenido. Evita que un archivo subido como imagen o texto se ejecute como HTML o JavaScript y la recomienda OWASP.

Germán Gutiérrez Escrito por 6 min de lectura
Ficha rápida
Sintaxis
X-Content-Type-Options: nosniff (es el único valor válido)
Origen
Internet Explorer 8 Beta 2, anunciada por Microsoft en septiembre de 2008
Qué bloquea
Scripts sin tipo MIME de JavaScript y hojas de estilo que no sean text/css
Recomendación OWASP
Enviar X-Content-Type-Options: nosniff y declarar bien el Content-Type en todo el sitio
Tipo
Cabecera de respuesta HTTP, se configura en el servidor o en la aplicación

≡En resumen

  • El MIME sniffing es la costumbre de los navegadores de adivinar el tipo de un archivo leyendo su contenido.
  • Con nosniff, el navegador usa el Content-Type que envía el servidor tal cual, sin adivinar.
  • Protege sobre todo a webs que alojan archivos subidos por usuarios frente a ataques XSS.
  • Antes de activarla, comprueba que cada recurso se sirve con su tipo MIME correcto, o se bloquearán scripts y estilos.
  • Es una de las cabeceras de seguridad básicas, junto a HSTS, CSP, Referrer-Policy y X-Frame-Options.

01 ¿Qué es X-Content-Type-Options?

Forma parte de la familia de cabeceras de seguridad que el servidor añade a cada respuesta, junto con las que activan HTTPS estricto o limitan qué scripts pueden cargarse. Es de las más sencillas de configurar: una línea en el servidor. Por eso aparece en casi todas las auditorías de seguridad web cuando falta.

02 Qué es el MIME sniffing y por qué es un riesgo

Cada archivo que sirve una web viaja con una etiqueta de tipo, el tipo MIME, en la cabecera Content-Type: text/html para páginas, text/css para estilos, image/png para imágenes. Durante años muchos servidores etiquetaban mal los archivos, así que los navegadores aprendieron a «olfatear» (sniff) los primeros bytes para adivinar el tipo real y mostrar el contenido de todos modos.

Esa ayuda tiene un lado oscuro: si un navegador decide que un archivo etiquetado como texto o imagen «parece» HTML o JavaScript, puede ejecutarlo. Un atacante que logre subir un archivo manipulado a tu web puede convertirlo así en un ataque de cross-site scripting (XSS).

Situación Sin nosniff Con nosniff
Script servido como text/plain El navegador puede ejecutarlo Se bloquea: no es un tipo MIME de JavaScript
Hoja de estilos servida como text/html Puede aplicarse Se bloquea: no es text/css
Archivo de texto con HTML dentro Riesgo de que se interprete como página Se muestra como texto plano
Recurso bien etiquetado Funciona Funciona igual
Qué cambia con nosniff

03 Cómo funciona nosniff exactamente

Según la documentación de MDN, nosniff tiene dos efectos. Primero, bloquea una petición si su destino es un estilo y el tipo MIME no es text/css, o si es un script y el tipo no es un tipo MIME de JavaScript. Segundo, para el resto de respuestas, incluidas las páginas HTML, el navegador usa el Content-Type recibido tal cual, sin examinar el contenido.

Ejemplo · Respuesta HTTP con la cabecera

HTTP/2 200
content-type: text/javascript; charset=utf-8
x-content-type-options: nosniff

El navegador ejecuta el script porque el tipo declarado es de JavaScript. Si el mismo archivo llegara como text/plain, lo rechazaría y verías un error en la consola.

Archivo Tipo MIME correcto
.js y .mjs text/javascript
.css text/css
.json application/json
.svg image/svg+xml
.webp image/webp
.woff2 font/woff2
Tipos MIME que conviene revisar antes de activar nosniff

04 Cómo añadir X-Content-Type-Options en Apache, Nginx, IIS y PHP

Ejemplo · Configuración en los servidores más habituales

Apache (.htaccess o virtual host, con mod_headers activo):
Header always set X-Content-Type-Options "nosniff"

Nginx (bloque server):
add_header X-Content-Type-Options "nosniff" always;

IIS (web.config, dentro de system.webServer):
<httpProtocol><customHeaders><add name="X-Content-Type-Options" value="nosniff" /></customHeaders></httpProtocol>

PHP (antes de enviar cualquier salida):
header('X-Content-Type-Options: nosniff');

  1. 1

    Revisa los tipos MIME

    Comprueba que JavaScript, CSS, fuentes e imágenes se sirven con su Content-Type correcto.

  2. 2

    Añade la cabecera en el servidor

    En un servidor Apache, en Nginx o en tu CDN, para que afecte a todas las respuestas.

  3. 3

    Evita duplicarla

    Si la aplicación o un plugin ya la envía, no la repitas en el servidor.

  4. 4

    Prueba la web completa

    Navega por las plantillas principales con la consola abierta: un script bloqueado aparece como error de tipo MIME.

  5. 5

    Verifica la respuesta

    Con curl -I https://tudominio.com o en la pestaña Red de las herramientas de desarrollo.

05 X-Content-Type-Options y el resto de cabeceras de seguridad

La hoja de referencia de cabeceras HTTP de OWASP recomienda enviar X-Content-Type-Options: nosniff y, a la vez, declarar correctamente el Content-Type en todo el sitio. Estas son las cabeceras con las que suele ir acompañada:

Cabecera Para qué sirve Valor recomendado por OWASP
X-Content-Type-Options Desactivar el MIME sniffing nosniff
Strict-Transport-Security (HSTS) Forzar HTTPS en visitas futuras max-age=63072000; includeSubDomains; preload
Content-Security-Policy Limitar de dónde se cargan scripts y recursos Política a medida de cada web
X-Frame-Options Impedir que te incrusten en iframes (clickjacking) DENY
Referrer-Policy Controlar qué URL de origen se comparte strict-origin-when-cross-origin
X-XSS-Protection Filtro XSS antiguo de algunos navegadores 0 u omitirla; usar CSP en su lugar
Cabeceras de seguridad recomendadas por OWASP

Para ver qué cabeceras envía hoy tu servidor, sigue los pasos para analizar las cabeceras HTTP de tu servidor. Y para situar estas medidas en contexto, repasa cómo proteger tu página de los ataques más comunes contra una web.

06 Errores frecuentes y límites de nosniff

  • ✓Activarla sin revisar los tipos MIME y romper scripts o estilos servidos como text/plain u octet-stream.
  • ✓Creer que sustituye a validar los archivos subidos: sigue siendo necesario comprobar extensión, tipo y contenido.
  • ✓Enviarla solo en las páginas HTML y no en los recursos estáticos o en las respuestas de la API.
  • ✓Usar valores inventados: el único valor válido es nosniff.
  • ✓Pensar que mejora el SEO: es una medida de seguridad, no un factor de posicionamiento.

Configurar bien las cabeceras, los permisos y el tratamiento de archivos es parte del trabajo de base de cualquier agencia de desarrollo web. Si tu web es un WordPress o una web corporativa, una empresa de diseño web que cuide también el servidor te evitará descubrir estos fallos después de un incidente.

Preguntas frecuentes sobre X-Content-Type-Options

Es una cabecera HTTP de seguridad que, con el valor nosniff, impide que el navegador adivine el tipo de un archivo y le obliga a usar el tipo MIME que declara el servidor.

Significa «no olfatear»: el navegador no debe analizar el contenido de un archivo para deducir su tipo. Es el único valor válido de la cabecera.

Sirve para evitar ataques XSS en los que un archivo subido como imagen o texto se interpreta como HTML o JavaScript, y para bloquear scripts y estilos servidos con un tipo incorrecto.

Con mod_headers activo, añade Header always set X-Content-Type-Options "nosniff" en el .htaccess o en la configuración del virtual host.

Añade add_header X-Content-Type-Options "nosniff" always; en el bloque server y recarga Nginx.

Sí, si algún script o CSS se sirve con un tipo MIME incorrecto: el navegador lo bloqueará. Revisa los tipos antes de activarla y prueba la web con la consola abierta.

Ejecuta curl -I con la URL de tu web y busca la línea x-content-type-options: nosniff, o mira las cabeceras de respuesta en la pestaña Red del navegador. Herramientas online como Mozilla Observatory revisan además el resto de cabeceras de seguridad.

No directamente. Es una medida de seguridad; su único efecto en SEO sería indirecto, al proteger la web de ataques que sí la perjudicarían.

Sí. Lo recomendable es aplicarla a todo el sitio, incluidos recursos estáticos, descargas y respuestas de API, siempre que cada archivo se sirva con su Content-Type correcto.

Fuentes consultadas

Germán Gutiérrez

Sobre el autor

Development Manager en appyweb

Dirige el equipo de desarrollo de appyweb: aplicaciones web y móviles, SaaS, integraciones y arquitectura de software.

Ver perfil en LinkedIn ↗

Términos relacionados

Ver todos los términos →
W Web security La web security o seguridad web es el conjunto de medidas técnicas y organizativas que protegen un sitio web, a sus usuarios y sus datos frente a accesos no autorizados, robos de información, fraudes y caídas. Abarca desde el cifrado HTTPS y las actualizaciones hasta las copias de seguridad, el firewall de aplicaciones y la autenticación en dos pasos. H HTTPS HTTPS (Hypertext Transfer Protocol Secure) es la versión cifrada de HTTP: navegador y servidor se comunican mediante TLS, que protege los datos frente a espionaje y manipulación y verifica la identidad del sitio con un certificado. Hoy es imprescindible: Chrome marca como «No seguro» las webs sin él y Google lo usa como señal de ranking desde 2014. A Análisis de cabecera HTTP del servidor El análisis de cabecera HTTP del servidor es la revisión de la línea de estado y las cabeceras que devuelve un servidor cuando se le pide una URL, para comprobar redirecciones, indexación, caché y seguridad. Importa porque detecta problemas invisibles en el navegador que frenan el rastreo de Google, ralentizan la web o la exponen a ataques. A Apache (servidor HTTP) Apache HTTP Server es un servidor web de código abierto, desarrollado por la Apache Software Foundation desde 1995, que recibe las peticiones de los navegadores y les entrega las páginas, imágenes y archivos de un sitio. Es modular, gratuito, compatible con Linux, Windows y macOS, y popularizó la configuración por carpetas con el archivo .htaccess. W Web server Un web server o servidor web es el software que recibe las peticiones HTTP de los navegadores y responde entregando páginas, imágenes, archivos o datos de una aplicación; por extensión, también el equipo que lo ejecuta. Los más usados son Nginx, Apache, LiteSpeed y Cloudflare, y su configuración influye en la velocidad y la seguridad de una web. J JavaScript JavaScript es un lenguaje de programación interpretado o compilado al vuelo, dinámico y basado en prototipos, que los navegadores ejecutan para hacer interactivas las páginas web. Junto a HTML y CSS forma la base de la web: lo usa el 98,9 % de los sitios, y con Node.js también sirve para servidores y aplicaciones.