¿Hay algún problema con la emisión de un encabezado HSTS en PHP?

8

Quiero probar una política de HSTS en mi blog sin habilitarlo inicialmente en todo el sitio. Como una política de HSTS es solo un encabezado de respuesta HTTP, ¿habría algún problema con el envío del encabezado en PHP ?:

header("strict-transport-security: max-age=600");

El sitio redireccionará cualquier solicitud de http: // a https: // y me doy cuenta de que esto probablemente resulte en el envío del encabezado HSTS a través de http: // que no debería. Sin embargo, para cumplir con HSTS, un agente de usuario debe ignorar la política de HSTS entregada a través de http: //, ya que podría haberse inyectado de manera malintencionada. Como esto es solo para propósitos de prueba, no estoy demasiado preocupado de todos modos.

Esto me permitirá emitir el encabezado solo en una página específica y exponerlo solo a mí mismo sin afectar a otros usuarios. También podría tener otra página para deshabilitar la política de HSTS como tal:

header("strict-transport-security: max-age=0");

¿Debería demostrarse que esto tiene éxito? ¿Hay algún problema que se pueda ver al emitir la política de HSTS de tal manera? Quizás los usuarios en un alojamiento compartido o sin acceso / conocimiento para configurar un encabezado de respuesta todavía podrían implementar HSTS de esta manera.

    
pregunta Scott Helme 30.09.2013 - 23:18
fuente

2 respuestas

10

HSTS se habilita al devolver el encabezado strict-transport-security de una respuesta HTTPS: al navegador no le importa si esto está configurado en PHP, por el servidor o por un equilibrador de carga, siempre que reciba un encabezado válido sobre HTTPS entonces HSTS estará habilitado.

Debería estar bien, solo devolver este encabezado desde una sola página para probar también. RFC 6797 declara

  

Si un UA recibe respuestas HTTP de un Host HSTS conocido a través de un seguro      canal pero las respuestas faltan el campo de encabezado STS, el UA      DEBE continuar tratando al host como un host HSTS conocido hasta que el      se alcanza el valor de edad máxima para el conocimiento de ese Host HSTS conocido.

por lo que sus otras respuestas sin el encabezado no cancelarán los HSTS de su sitio.

La configuración de max-age=0 también es la forma correcta de cancelar HSTS para su sitio (por cada agente de usuario receptor). Lo único que he detectado que no es estándar de la forma en que lo está haciendo es que también está enviando el encabezado a través de HTTP, aunque un agente de usuario compatible lo ignoraría, por lo que no es válido, así que me aseguraré de transmitirlo únicamente. cuando la conexión es segura (lo mejor es atenerse a los estándares lo más cerca posible)

Puede verificar si emitir el encabezado con el siguiente código que compruebe que se haya accedido a la página a través de HTTPS :

<?php
function isSSL(){

    if($_SERVER['https'] == 1) /* Apache */ {
        return TRUE;
    } elseif ($_SERVER['https'] == 'on') /* IIS */ {
        return TRUE;
    } elseif ($_SERVER['SERVER_PORT'] == 443) /* others */ {
        return TRUE;
    } else {
        return FALSE; /* just using http */
    }

}
?>
    
respondido por el SilverlightFox 30.11.2013 - 10:03
fuente
0

El encabezado HSTS es para un dominio (o subdominios, si se suministra con la directiva includeSubDomain ). Sin embargo, un valor de 0 en max-age hará que el agente de usuario deje de usar HSTS. (Consulte sección 6.1.1 del borrador de especificaciones .)

    
respondido por el Novice User 01.10.2013 - 09:02
fuente

Lea otras preguntas en las etiquetas