Por qué deberías añadir un encabezado HTTP nosniff a tus webs

En la última actualización de seguridad de Chrome, Google pide a los webmasters que las webs deberían de tener un encabezado HTTP de respuesta nosniff para ayudar a prevenir hackeos a través de los navegadores web. Os explicamos un poco de qué va el tema.

Contenidos

Los ataques (Spectre & Meltdown) aprovechan las vulnerabilidades del dispositivo de un usuario para robar información confidencial como contraseñas.

Qué hace la actualización 67 de Chrome

Google Chrome en la versión 67 introduce una característica que anteriormente estaba en beta llamada «Site Isolation». El Aislamiento del Sitio es un método para prevenir un ataque al navegador de un visitante del sitio.

Según la página de desarrolladores de Chrome:

“Site Isolation is a security feature in Chrome that offers additional protection against some types of security bugs. It makes it harder for untrustworthy websites to access or steal information from your accounts on other websites.

…Site Isolation offers a second line of defense to make such attacks less likely to succeed. It ensures that pages from different websites are always put into different processes, each running in a sandbox that limits what the process is allowed to do. It will also make it possible to block the process from receiving certain types of sensitive data from other sites. As a result, a malicious website will find it more difficult to steal data from other sites, even if it can break some of the rules in its own process.”

Traducción libre:

«Aislamiento del sitio es una característica de seguridad en Chrome que ofrece protección adicional contra algunos errores de seguridad. Hace más difícil para los sitios web no fiables acceder o robar información de sus cuentas en otros sitios web. Aislamiento de sitios ofrece una segunda línea de defensa para hacer que tales ataques tengan menos probabilidades de éxito. Garantiza que las páginas de diferentes sitios web siempre se pongan en procesos diferentes, cada una ejecutándose en un sandbox que limita lo que el proceso tiene permitido hacer. También impedirá que el proceso reciba ciertos tipos de datos sensibles de otros sitios. Como resultado, a un sitio web malicioso le resultará más difícil robar datos de otros sitios, incluso si puede romper algunas de las reglas en su propio proceso».

 

Lo que Google quiere que hagan los webmasters

Hay dos cosas que el equipo de Google Chrome pide a los desarrolladores y editores que hagan para ayudar a la función de aislamiento del sitio de Chrome a trabajar de forma más eficiente.

  1. Comprobar que los recursos se sirven con las cabeceras de respuesta «Content-Type» correctas.
  2. Y que los recursos se sirvan con un encabezado HTTP nosniff.

Esto es lo que dice la página de desarrolladores de Google:

For HTML, JSON, and XML resources: Make sure these resources are served with a correct “Content-Type” response header from the list below, as well as a “X-Content-Type-Options: nosniff” response header. These headers ensure Chrome can identify the resources as needing protection, without depending on the contents of the resources.

  • HTML MIME type – “text/html”
  • XML MIME type – “text/xml”, “application/xml”, or any MIME type whose subtype ends in “+xml”
  • JSON MIME type – “text/json”, “application/json”, or any MIME type whose subtype ends in “+json”

Traducción libre:

Para recursos HTML, JSON y XML: Asegúrese de que estos recursos se sirven con un encabezado de respuesta «Content-Type» correcto de la lista siguiente, así como un encabezado de respuesta «X-Content-Type-Options: nosniff». Estas cabeceras aseguran que Chrome puede identificar los recursos como necesitados de protección, sin depender del contenido de los recursos.

  • HTML MIME tipo – «text/html»
  • Tipo MIME XML – «text/xml», «application/xml», o cualquier tipo MIME cuyo subtipo termine en «+xml».
  • tipo JSON MIME – «text/json», «application/json», o cualquier tipo MIME cuyo subtipo termine en «+json».

 

¿Qué es el encabezado HTTP nosniff?

El encabezado de respuesta nosniff es una forma de mantener un sitio web más seguro.

El encabezado HTTP nosniff es un marcador utilizado por el servidor para indicar que los tipos MIME anunciados en los encabezados Content-Type no se deben cambiar ni seguir. Esto permite desactivar el MIME type sniffing. Este encabezado fue introducido por Microsoft en IE 8 para que los webmasters bloquearan el rastreo de contenido, pudiendo transformar tipos MIME no ejecutables en tipos MIME ejecutables. Desde entonces, otros navegadores lo han introducido, incluso con  algoritmos de detección MIME menos agresivos.

Si enviamos la cabecera X-Content-Type-Options en la respuesta con el valor “nosniff”, los navegadores que soportan esta cabecera (IE y Chrome), no cargan las hojas de estilos, ni los scripts (Javascript), cuyo Mime-type no sea el adecuado.

Chrome 67 cuenta ahora con un proceso automatizado para proteger a los usuarios de los ataques de Spectre y Meltdown. Sin embargo, Google recomienda que los desarrolladores web no confíen en este proceso automático, sino que lo dejen claro con el encabezado de respuesta nosniff:

“…when the “nosniff” header is not present, Chrome first looks at the start of the file to try to confirm whether it is HTML, XML, or JSON, before deciding whether to protect it. If it cannot confirm this, it allows the response to be received by the cross-site page’s process. This is a best-effort approach which adds some limited protection while preserving compatibility with existing sites. We recommend that web developers include the “nosniff” header to protect their resources, to avoid relying on this “confirmation sniffing” approach.”

Traducción libre: «…cuando el encabezado «nosniff» no está presente, Chrome primero mira al inicio del archivo para intentar confirmar si es HTML, XML o JSON, antes de decidir si lo protege. Si no puede confirmar esto, permite que la respuesta sea recibida por el proceso de la página cruzada. Se trata de un enfoque de mejor esfuerzo que añade una protección limitada al tiempo que preserva la compatibilidad con los sitios existentes. Recomendamos que los desarrolladores web incluyan el encabezado HTTP «nosniff» para proteger sus recursos, para evitar confiar en este enfoque de «olfateo de confirmación».

 

¿Cómo Agregar un Encabezado de respuesta HTTP Nosniff?

Lo primero que hay que hacer es comprobar las cabeceras de seguridad. SecurityHeaders.com es una herramienta gratuita y fácil de usar que analiza los sitios web para ver si carecen de encabezados relacionados con la seguridad.

Añadiendo el nosniff se reduce el riesgo de que se produzca un ataque basado en confusión de tipos mime. En general con la Cabecera X-Content-Type-Options evitaremos que se carguen hojas de estilo o scripts maliciosos.

 

Implementar nosniff mediante htaccess

Simplemente añadiendo este código al archivo .htaccess añadirá el código de respuesta HTTP nosniff:

<IfModule mod_headers.c>
Header set X-Content-Type-Options nosniff
</IfModule>

 

Cómo implementar el nosniff en WordPress modificando el archivo functions.php

Una de las opciones en WordPress es añadir el siguiente código en el archivo functions.php del tema activo:

add_action( 'send_headers', 'add_header_xcontenttype' );
function add_header_xcontenttype() {
header( 'X-Content-Type-Options: nosniff' );
}

Y si queremos añadir más encabezados HTTP de seguridad, el código a añadir en el functions.php quedará similar a esto:

add_action( 'send_headers', 'add_header_security' );
 function add_header_security() {
 header( 'X-Content-Type-Options: nosniff' );
 header( 'X-Frame-Options: SAMEORIGIN' );
 header( 'X-XSS-Protection: 1;mode=block' );
 }

 

Cómo implementar el nosniff en WordPress con un plugin

En el repositorio de WordPress hay tres plugins interesantes que incluyen el código de respuesta nosniff en el encabezado de las páginas:

  • Security Headers: Tiene más de 3.000 instalaciones y es un plugin fácil de usar con una configuración mínima que hace una cosa y la hace bien.
  • HTTP Headers to Improve Security: Tiene más de 1.000 instalaciones y tiene más funciones para mejorar la seguridad, incluyendo la configuración de una cabecera CSP (Content-Security-Policy), que ayuda a evitar el uso de secuencias de comandos entre sitios y el secuestro de clics.
  • HTTP Headers: Tiene más de 6.000 instalaciones, es fácil de usar pero a la vez es muy completo.

Échale un vistazo a los tres y usa el que más te convenza.

OJO: Si usas un plugin de caché hay que vaciar la caché después de haber instalado uno de estos plugins para que todo funcione correctamente.

 

Recuerda: Los encabezados HTTP relacionados con la seguridad son importantes y toda web debería usarlos.

¿Conocías este tema? Si te ha parecido interesante, comparte y comenta.

Descubre porqué somos Apasionados del Marketing

Mira también

Cómo saber el stock de un producto en Amazon (truco)

Hoy os quiero presentar un truco que llevamos usando desde hace tiempo y que a …