Seguridad web: HSTS

Mejora la seguridad de tu sitio web con la directiva HSTS, evitando el tráfico de datos por medios inseguros.

Introducción

HTTP con Seguridad de Transporte Estricta o HSTS (HTTP Strict Transport Security - RFC 6797), es una política de seguridad diseñada para impedir que los visitantes de nuestro sitio web sean capaces de acceder de manera insegura a través del procotolo HTTP.

Cuando el servidor web hace uso de esta política, todos los visitantes que intenten acceder a través del protocolo HTTP serán redirigidos a la versión HTTPS. De ahí viene lo de estricta.

Habilitar HSTS

Esta directiva se habilita en el servidor, añadiendo una cabecera HTTP (HTTP header) a la respuesta. Cuando un visitante acceda por primera vez al sitio web a través del procotolo HTTPS, el navegador recordará esta cabecera por un tiempo definido por el servidor.

HTTP -> HTTPS

Si el visitante nunca ha accedido a través de HTTPS y siempre lo hace mediante HTTP, esta cabecera todavía no tendría utilidad puesto que su funcionamiento comienza en la primera visita a través del protocolo HTTPS. Asegúrate de redirigir las peticiones HTTP a la versión HTTPS para hacer uso de la cabecera y así los navegadores recordarán la directiva en futuros accesos.

La cabecera en cuestión es Strict-Transport-Security y acepta tres parámetros: max-age, includeSubDomains y preload, siendo el primero de ellos obligatorio.

Ejemplos de cabecera HSTS
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

El parámetro max-age indica (en segundos) la cantidad de tiempo que el navegador debe recordar esta característica. Para conseguir una calificación de A+ en el test de seguridad ofrecido por Qualys SSL Labs, el valor de max-age debe ser de al menos 6 meses.

El parámetro opcional includeSubDomains hace que esta política también afecte a todos los subdominios (recomendado).

Por último, el parámetro opcional preload valida una petición de precarga. Este parámetro es necesario cuando demos de alta nuestro dominio en las listas de precarga de HSTS, algo que veremos más abajo.

Deshabilitar HSTS

Para deshabilitar esta política basta con modificar el valor de max-age a max-age=0. La cabecera debe estar presente un tiempo para que los visitantes puedan recibir este nuevo valor y proceder al olvido de esta directiva de seguridad.

Precarga

Google creó hace un tiempo una lista de precarga de HSTS donde el administrador de un sitio web puede incluir su dominio. Esta lista se distribuye dentro del navegador Google Chrome. Otros navegadores como Firefox, Opera, Safari, IE11 y Edge también tienen sus listas de precarga basadas en este proyecto, por lo que la inclusión de un dominio en el proyecto de Google será suficiente para precargar el dominio en todos los demás navegadores compatibles.

Para dar de alta un dominio en la lista de precarga de HSTS sigue las instrucciones que aparecen en el sitio web hstspreload.org.

No mires atrás

Recuerda que una vez hayas incluído tu dominio en las listas de precarga será un poco más complicado volver atrás en la decisión y tu dominio únicamente será accesible a través de HTTPS.

Ya que el navegador web conocerá con antelación el estado de la directiva HSTS de un dominio, y puesto que será imposible conectar a través de HTTP debido a esto, el requerimiento de que un usuario necesitará conectar por primera vez a través del protocolo HTTPS para recibir la cabecera queda subsanado, puesto que el navegador realmente ya no necesita consultar la cabecera.

A pesar de que estas aclaraciones puedan parecer una restricción, habilitar la cabecera HSTS y la precarga de esta directiva es un punto a favor que añadirá protección al flujo de datos.

Puedes apoyarme para que pueda dedicar aún más tiempo a escribir artículos y tener recursos para crear nuevos proyectos. ¡Gracias!