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 ?
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
oupreload
) - 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 directiveincludeSubDomains
, 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:
En commençant par un petit
max-age
et en n'ajoutant que desincludeSubDomains
(sanspreload
):max-age=3600; includeSubDomains
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
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