Los encabezados de seguridad son un subconjunto de los encabezados de respuesta HTTP que puede establecer un servidor web que impone una verificación de seguridad en los navegadores. Los encabezados HTTP son una forma de metadatos que se envían con solicitudes y respuestas web. El encabezado de seguridad «X-Content-Type-Options» evita que los navegadores realicen un rastreo MIME.
Nota: los encabezados HTTP no son exclusivos de HTTP y también se utilizan en HTTPS.
¿Qué está oliendo MIME?
Cuando los datos se envían a través de la web, uno de los metadatos incluidos es un tipo MIME. Las Extensiones de correo de Internet multipropósito, o tipos MIME, son un estándar que se usa para definir el tipo de datos que contiene un archivo, lo que indica cómo se debe manejar el archivo. Normalmente, el tipo MIME consta de un tipo y un subtipo con un parámetro y un valor opcionales. Por ejemplo, un archivo de texto UTF-8 tendría el tipo MIME «text / plain; charset = UTF-8». En este ejemplo, el tipo es «texto», el subtipo es «simple», el parámetro es «juego de caracteres» y el valor es «UTF-8».
Para evitar el etiquetado incorrecto y el mal manejo de archivos, los servidores web suelen realizar un rastreo de MIME. Este es un proceso en el que se ignora el tipo MIME declarado explícitamente y en su lugar se analiza el comienzo del archivo. La mayoría de los tipos de archivos incluyen secuencias de encabezado que indican qué tipo de archivo es. La mayoría de las veces, los tipos MIME son correctos y el rastreo de archivos no hace ninguna diferencia. Sin embargo, si hay una diferencia, los servidores web utilizarán el tipo de archivo detectado para determinar cómo manejar el archivo en lugar del tipo MIME declarado.
El problema ocurre si un atacante logra cargar un archivo como una imagen PNG, pero el archivo es en realidad algo más como código JavaScript. Para tipos de archivos similares, como dos tipos de texto, esto puede no causar demasiados problemas. Sin embargo, se convierte en un problema grave si se puede ejecutar un archivo perfectamente inofensivo.
¿Qué hace X-Content-Type-Options?
El encabezado X-Content-Type-Options solo tiene un valor posible «X-Content-Type-Options: nosniff». La activación informa al navegador del usuario que no debe rastrear el tipo MIME y, en cambio, se basa en el valor declarado explícitamente. Sin esta configuración, si una imagen enmascarara un archivo JavaScript malicioso como PNG, el archivo JavaScript se ejecutaría. Con X-Content-Type-Options habilitado, el archivo se tratará como una imagen que no se carga porque el archivo no tiene un formato de imagen válido.
X-Content-Type-Options no es particularmente necesario en un sitio web que utiliza recursos totalmente propios, ya que no hay posibilidad de que un archivo malicioso se publique accidentalmente. Si un sitio web utiliza contenido de terceros como recursos externos o enviados por el usuario, X-Content-Type-Options brinda protección contra este tipo de ataque.