Web Security – 4 Tips para configurar correctamente HTTPS

Https
Fuente: http://www.omicrono.com/

Por lo general se cree que con solo exponer nuestro sitio web bajo el protocolo HTTPS, sin realizar ninguna configuración adicional, es suficiente para proteger nuestra información. Es cierto que la información viaja protegida, pero ¿Cómo protegemos la información que se encuentra del lado del cliente? A continuación veremos 4 pasos que se deben realizar sobre un sitio web para que aproveche los beneficios de ser expuesto bajo el protocolo HTTPS y de esta manera proteger la información que se encuentra dentro de las cookies.

Para descargar el código haz clic acá.

Tips para configurar correctamente HTTPS

1. Asegurar la cookie de autenticación

Al usar la autenticación tipo Forms debemos activar la propiedad requireSSL para indicar que la cookie de autenticación solo debe ser enviada vía HTTPS.

<authentication mode="Forms">
  <forms loginUrl="~/seguridad/login/"
          name="05A49E"
          cookieless="UseCookies"
          requireSSL="true"
          timeout="5000"
          slidingExpiration="false"/>
</authentication>

Si se activa el atributo requireSSL pero no se configura el sitio para que corra bajo HTTPS ocurrirá el siguiente error:

System.Web.HttpException: The application is configured to issue secure cookies. These cookies require the browser to issue the request over SSL (https protocol). However, the current request is not over SSL.

2. Asegurar las cookies usadas por la aplicación

Para asegurar las cookies que cree la aplicación se deben realizar dos pasos:

  • Activar el atributo httpOnlyCookies para restringir el acceso a las cookies mediante cualquier script del lado del cliente.
  • Activar el atributo requireSSL para indicar que las cookies que la aplicación cree solo deben ser enviadas vía HTTPS. Al activar la propiedad requireSSL automáticamente se le asigna un flag seguro (Secure flag) a todas las cookies para asegurarse que solo serán enviadas al sitio web si este es accedido por HTTPS.
<httpCookies httpOnlyCookies="true" 
             requireSSL="true" />
3. Agregar la cabecera Http Strict Transport Security (HSTS)

El Http Strict Transport Security (HSTS) es un mecanismo de seguridad web el cual indica que todo navegador web que quiera acceder a una página debe hacerlo mediante conexiones HTTPS.

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Strict-Transport-Security" 
           value="max-age=16070400; includeSubDomains" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
4. Usar el atributo HttpsAtribute

Finalmente, para redirigir todas las peticiones al esquema HTTPS solo se debe usar el filtro RequireHttpsAttribute sobre todos los controladores. Esto puede causar problemas en el momento del desarrollo, por tal motivo se creó esta clase que valida si la solicitud es local o no para re dirigirla al esquema HTTPS.

public class RequireHttpsCustomFilter : RequireHttpsAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        if (filterContext.HttpContext.Request.IsLocal)
        {
            //Cuando la conexion a la aplicacion es local, no pide HTTPS
            return;
        }

        base.OnAuthorization(filterContext);
    }
}

Se recomienda que no solo se configure la página del Login para que corra bajo HTTPS sino que todo el sitio web debe hacerlo. De otra forma solo nos aseguramos que las credenciales viajen seguras pero luego cualquier interacción con el servidor web puede ser interceptada.

Conclusión

Configurar un sitio web para que soporte correctamente HTTPS no es complicado. Primero debemos activar el atributo requireSSL en la sección de autenticación tipo Forms para que solo se envíen las cookies si se accede vía HTTPS. Luego activamos los atributos requireSSL y httpOnlyCookies en la sección httpCookies. El atributo httpOnlyCookies protege que las cookies no puedan ser accedidas por cualquier script del lado del cliente. También se debe agregar la cabecera Http Strict Transport Security (HSTS) para forzar a que cualquier navegador web accede vía HTTPS. Finamente, se debe configurar que todos los controladores sean accedidos vía HTTPS agregando el filtro personalizado RequireHttpsCustomFilter.

Referencias:
Metal Tip:

Este artículo lo escribí escuchando la canción The Dreadful Hours de la banda de Doom Death Metal My Dying Bride de Inglaterra, les comparto el enlace.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s