En la práctica, ¿es seguro establecer el encabezado Strict-Transport-Security en las solicitudes que no son SSL?

4

La Sección 7.2 de RFC 6797 declara:

  

Un host HSTS NO DEBE incluir el campo de encabezado STS en las respuestas HTTP
  transportado a través de transporte no seguro.

En la práctica, tengo muchos hosts detrás de un equilibrador de carga de Amazon donde las solicitudes de los puertos 443 y 80 se reenvían a la misma configuración Nginx. Sería considerablemente más sencillo enviar siempre el encabezado Strict-Transport-Security , independientemente del protocolo de entrada utilizado.

No me importa si el UA ignora el encabezado en solicitudes inseguras. Solo me gustaría confirmar si esta infracción RFC causa un problema en la práctica.

Las solicitudes inseguras ya están redirigidas a versiones seguras por parte del servidor, donde la UA recibiría un encabezado Secure-Transport-Security válido en su respuesta.

    
pregunta Mark Stosberg 18.12.2015 - 23:28
fuente

2 respuestas

5

Si el requisito es MUST NOT , entonces, en teoría, algunos navegadores pueden mostrar un error en lugar de una página que tiene este encabezado cuando se obtiene mediante HTTP simple. Sin embargo, es muy poco probable.

(Actualización: este comportamiento improbable está realmente prohibido por el mismo RFC)

Claramente, el punto es que a través de HTTP no se puede confiar en que se origine en el servidor original, por lo que si cualquier navegador lo interpretaría cuando se viera con HTTP, entonces este encabezado podría (ab) usarse para forzar que el servidor aparezca sin conexión para una tiempo adicional sin el consentimiento del operador del servidor, con capacidades suficientes para controlar la ruta de la red.

Los nuevos autores de software de UA / cliente todavía podrían cometer un error al interpretar este encabezado, y puede ser una buena protección contra esto si usted exige que nunca se emita HSTS a través de HTTP, de modo que se pueda marcar e informar. como error por cualquier validador.

Aunque no probé esto, con nginx, no es muy complicado decirlo:

if ($scheme = https) {
    add_header Strict-Transport-Security max-age=18000000;
}

El único problema que puedo prever es cuando tienes un SSL limitado que descarga el proxy frontend y no puedes saber fácilmente si la solicitud es SSL o no. En ese caso, realmente debe emitir HSTS a través de HTTP, asumiendo que su CDN / proxy no tiene una forma de configurar HSTS.

    
respondido por el chexum 19.12.2015 - 00:06
fuente
2

Si bien la directiva if se puede usar para limitar el encabezado HSTS a HTTPS, se vuelve desordenada cuando tiene varios bloques location en su archivo de host virtual. Encontré la siguiente solución en un boleto trac de Nginx.

map $scheme $hsts_header {
    https   max-age=31536000;
}

server {
    listen  80;
    listen  443 ssl;

    add_header Strict-Transport-Security $hsts_header;
}
    
respondido por el A.Jesin 22.09.2016 - 00:06
fuente

Lea otras preguntas en las etiquetas