Utiliser une règle HSTS stricte

Les protocoles en texte clair, tels que HTTP, peuvent être vulnérables aux attaques par écoute clandestine, au cours desquelles un pirate informatique peut lire le contenu transmis. Le protocole TLS (Transport Layer Security) peut chiffrer le trafic et rendre beaucoup plus difficile l'utilisation de ces données par des pirates informatiques s'ils parviennent à les capturer.

Toutefois, il est possible pour des pirates informatiques de contourner TLS en forçant les connexions chiffrées à utiliser le protocole HTTP en texte clair. Pour résoudre ce problème, vous pouvez utiliser l'en-tête de réponse HTTP Strict Transport Security (HSTS). HSTS oblige le navigateur de l'utilisateur à accéder à un site Web à l'aide de TLS et ne lui permet pas de revenir à HTTP en texte brut pendant une durée déterminée.

Browser Support

  • Chrome: 4.
  • Edge: 12.
  • Firefox: 4.
  • Safari: 7.

Source

Échec de l'audit Lighthouse

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

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

  • Si aucun en-tête HSTS n'est trouvé.
  • S'il manque l'une des directives recommandées (max-age, includeSubDomains, preload)
  • Si la durée de la directive max-age est inférieure à un an (31 536 000 secondes).
  • Si une erreur de syntaxe se produit lors de l'analyse de l'en-tête, par exemple une directive inconnue.

Configurer une règle HSTS efficace

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 en utilisant uniquement TLS (en secondes). Une fois le délai écoulé, les utilisateurs peuvent à nouveau accéder au site avec le protocole HTTP simple si le site Web ne fournit pas d'en-tête HSTS (ou de redirections temporaires de HTTP vers HTTPS).
  • La définition de 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 google.com envoie un en-tête HSTS qui inclut la directive includeSubDomains, l'en-tête HSTS sera appliqué à mail.google.com.
  • Définir la directive preload et envoyer le domaine au service de préchargement HSTS compilera le domaine dans les binaires du navigateur qui utilisent la liste HSTS préchargée. Cela vaut pour plus que Google Chrome.

Le déploiement de l'en-tête HSTS comporte certains risques. Toutes les fonctionnalités qui nécessitent une connexion HTTP non chiffrée seront effectivement inutilisables pendant la durée définie dans la directive max-age. Cela peut prendre encore plus de temps 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. Commencez par un petit max-age et n'ajoutez que includeSubDomains (pas de preload) :

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

    max-age=604800; includeSubDomains
    
  3. Si cette phase initiale est concluante pendant une période prolongée (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