Los encabezados de seguridad son un subconjunto del encabezado de respuesta HTTP que puede ser configurado por un servidor web y cada uno aplica un control 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 se envían datos a través de la web, uno de los metadatos incluidos es un tipo MIME. Las extensiones multipropósito de correo de Internet, o tipos MIME, son un estándar que se utiliza 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 ese ejemplo, el tipo es "texto", el subtipo es "plano", el parámetro es "juego de caracteres" y el valor es "UTF-8".
Para evitar el etiquetado incorrecto y el manejo inadecuado de los archivos, los servidores web suelen realizar un rastreo MIME. Este es un proceso en el que se ignora el tipo MIME explícitamente indicado y, en su lugar, se analiza el inicio del archivo. La mayoría de los tipos de archivo incluyen secuencias de encabezado que indican qué tipo de archivo es. La mayoría de las veces, los tipos MIME son correctos, y rastrear el archivo no hace ninguna diferencia. Sin embargo, si hay una diferencia, los servidores web utilizarán el tipo de archivo analizado 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 realmente algo más como un código JavaScript. Para tipos de archivo similares, como dos tipos de texto, esto puede no causar demasiado problema. Sin embargo, se convierte en un problema grave si en su lugar se puede ejecutar un archivo perfectamente inocuo.
¿Qué hace X-Content-Type-Options?
El encabezado X-Content-Type-Options solo tiene un valor posible “X-Content-Type-Options: nosniff”. Al habilitarlo, se informa al navegador del usuario que no debe realizar un rastreo de tipo MIME y, en su lugar, debe confiar en el valor declarado explícitamente. Sin esta configuración, si un archivo JavaScript malicioso se disfrazó como una imagen como PNG, se ejecutaría el archivo JavaScript. Con X-Content-Type-Options habilitado, el archivo se tratará como una imagen que no se carga porque el archivo no es 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 entregue 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.