Urgent : faille PHP critique. Comment vérifier →

Ajouter HSTS à votre site web

Si votre analyse de sécurité indique que HSTS n'est pas configuré, les navigateurs qui visitent votre site ne sont pas obligés d'utiliser HTTPS à chaque requête. Ce guide explique comment ajouter correctement l'en-tête Strict-Transport-Security.

Ce que signifie ce constat

HSTS (HTTP Strict Transport Security) est un en-tête de réponse HTTP qui indique aux navigateurs de toujours utiliser HTTPS pour se connecter à votre domaine, et de refuser entièrement les connexions HTTP pendant une durée donnée. Sans HSTS, même si votre serveur redirige HTTP vers HTTPS, la première requête d'un utilisateur sur une nouvelle connexion peut brièvement passer en HTTP non chiffré avant que la redirection ne s'applique.

Pourquoi c'est important

  • Empêche les attaques de type SSL stripping, dans lesquelles un attaquant fait passer une connexion de HTTPS à HTTP
  • Supprime la fenêtre de vulnérabilité de la première requête HTTP
  • Indispensable pour le préchargement HSTS, la liste tenue par les navigateurs des sites toujours en HTTPS
  • Renforce la confiance des utilisateurs et constitue un élément utile dans la plupart des évaluations de domaine

La bonne valeur d'en-tête HSTS

Commencez avec un max-age court, puis augmentez-le lorsque vous êtes sûr que HTTPS fonctionne de manière fiable sur l'ensemble de votre domaine.

Valeur de départ (sans risque)

Elle indique aux navigateurs d'utiliser HTTPS pendant 24 heures :

Strict-Transport-Security: max-age=86400

Valeur recommandée (une fois le bon fonctionnement confirmé)

Elle impose HTTPS pendant un an sur tous les sous-domaines :

Strict-Transport-Security: max-age=31536000; includeSubDomains

Valeur prête pour le préchargement (facultatif)

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Avant d'ajouter preload : Le préchargement HSTS est difficile à annuler. N'ajoutez la directive preload que lorsque vous êtes certain que chaque sous-domaine de votre domaine sert correctement HTTPS. Une fois le domaine soumis à la liste de préchargement, son retrait met des mois à se propager.

Ajouter l'en-tête selon votre plateforme

Cloudflare

Settings → SSL/TLS → Edge Certificates → HTTP Strict Transport Security → Enable. Réglez max-age sur au moins 6 mois. Cloudflare ajoute alors l'en-tête automatiquement.

Nginx

Ajoutez dans votre bloc server :

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Apache

Ajoutez dans votre fichier .htaccess ou dans la configuration de votre VirtualHost :

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Vercel

Ajoutez dans vercel.json :

{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        {
          "key": "Strict-Transport-Security",
          "value": "max-age=31536000; includeSubDomains"
        }
      ]
    }
  ]
}

Netlify

Ajoutez dans netlify.toml :

[[headers]]
  for = "/*"
  [headers.values]
    Strict-Transport-Security = "max-age=31536000; includeSubDomains"

Vérifier que cela fonctionne

Analysez votre domaine sur mydomainrisk.com : le constat HSTS indiquera la valeur max-age détectée et si includeSubDomains et preload sont présents.

Vérifiez vos en-têtes de sécurité

MyDomainRisk vérifie HSTS, CSP, X-Frame-Options, Referrer-Policy, Permissions-Policy et bien d'autres, gratuitement.

Analyser un domaine gratuitement →