Utiliser une règle HSTS stricte

Les protocoles en texte brut, tels que HTTP, peuvent être vulnérables aux attaques par écoute, qui permettent à un pirate informatique de lire le contenu transmis. Heureusement, le protocole TLS (Transport Layer Security) peut chiffrer le trafic et rendre l'utilisation de ces données par des pirates informatiques beaucoup plus difficile en cas de capture.

Cependant, les pirates informatiques peuvent contourner TLS en forçant les connexions chiffrées à utiliser HTTP en texte brut. Pour résoudre ce problème, l'en-tête de réponse HTTP Strict Transport Security (HSTS) a été introduit. Il oblige le navigateur de l'utilisateur à accéder à un site Web uniquement via TLS et à ne pas revenir au protocole HTTP en texte brut (pendant une durée définie).

Pourquoi l'audit Lighthouse échoue-t-il ?

Avertissement d'audit Lighthouse indiquant qu'aucun en-tête de réponse HSTS n'a été trouvé.
Avertissement du rapport Lighthouse indiquant qu'aucun en-tête de réponse HSTS n'a été trouvé.

L'audit signalera les problèmes suivants avec l'en-tête HSTS:

  • Si aucun en-tête HSTS n'est trouvé.
  • Si l'une des directives recommandées est manquante (max-age, includedSubDomains ou preload)
  • Si la durée de la directive max-age est inférieure à un an (31 536 000 secondes).
  • En cas d'erreur de syntaxe lors de l'analyse de l'en-tête, par exemple en cas d'instruction inconnue.

Configurer une règle HSTS stricte

La configuration optimale de l'en-tête HSTS se présente comme suit:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • La directive max-age spécifie la durée pendant laquelle le navigateur de l'utilisateur est forcé de visiter un site Web uniquement à l'aide de TLS (en secondes). Passé ce délai, il sera à nouveau possible d'accéder au site via le protocole HTTP standard si aucun en-tête HSTS n'est fourni par le site Web (ou si des redirections temporaires de HTTP vers HTTPS sont en place).
  • Définir la directive includeSubDomains applique l'en-tête à tous les sous-domaines de l'URL de la page qui envoie l'en-tête initialement. Par exemple, si un en-tête HSTS envoyé par google.com inclut la directive includeSubDomains, l'en-tête HSTS est également appliqué sur mail.google.com.
  • Définir la directive preload et envoyer le domaine au service de préchargement HSTS permet de compiler le domaine dans des binaires de navigateur qui utilisent la liste HSTS préchargée (et pas seulement Google Chrome).

Le déploiement de l'en-tête HSTS comporte certains risques. Toutes les fonctionnalités nécessitant une connexion HTTP non chiffrée seraient effectivement interrompues pendant la durée définie dans la directive max-age. Le délai peut être encore plus long si la directive preload est appliquée.

Pour réduire les risques associés au déploiement, nous vous recommandons d'adopter une approche par étapes:

  1. En commençant par un petit max-age et en n'ajoutant que des includeSubDomains (sans preload):

    max-age=3600; includeSubDomains
    
  2. Après une période d'attente (par exemple, une semaine) sans problème signalé, augmentez la valeur de max-age, par exemple:

    max-age=604800; includeSubDomains
    
  3. Si cette phase initiale aboutit pendant une longue période (par exemple, trois mois), le site Web et ses sous-domaines doivent être ajoutés à la liste de préchargement HSTS et la directive preload doit être ajoutée.

    max-age=63072000; includeSubDomains; preload