HTTP Strict Transport Security (HSTS) es un mecanismo de seguridad web donde el servidor exige que las conexiones se realicen únicamente mediante conexiones seguras. El servidor informa de esta política de seguridad utilizando la cabecera Strict-Transport-Security, en donde se especifica el periodo durante el cual las conexiones seguras son obligatorias.

Si una web proporciona acceso seguro (HTTPS) pero accedemos de forma no segura (HTTP) podría suceder que nos redirija a la versión segura, sin embargo, ya se había iniciado una conversación sin cifrar. Este comportamiento puede ser explotado por un ataque Man-In-The-Middle.

La política de seguridad HSTS pretende evitar este tipo de ataques, impidiendo que se realice ninguna conexión que no sea segura. La cabecera no se envía durante una transacción HTTP no cifrada dado que el User-Agent no sabe si HTTPS está disponible y porque podría haber sido inyectada por un atacante.

Configuración en Apache

En Apache, además de tener habilitado mod_headers, deberemos introducir la siguiente línea allí donde configuramos la conexión SSL. Por ejemplo, tras el DocumentRoot del VirtualHost seguro por defecto en el archivo /etc/apache2/sites-enabled/default-ssl:

Header add Strict-Transport-Security "max-age=15768000"

El atributo max-age especifica el tiempo durante el cual las conexiones seguras serán obligatorias. También se puede añadir el atributo includeSubDomains para incluir todos los subdominios:

Header add Strict-Transport-Security "max-age=15768000; includeSubDomains"

WordPress, por ejemplo, tiene una directiva para conseguir que la conexión al panel de control se haga a través de una conexión segura. Pero es posible que en otros casos sigamos necesitando una redirección hacia la versión segura de la página, que podemos conseguir mediante mod_rewrite:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>

Entradas relacionadas


Published

Category

admin

Tags

Contacto