Comment implémenter HSTS

Découvrez notre offre de Cloud Public

L'hébergement mutualisé pour tou·te·s, imaginé par des développeur·euse·s, pour des développeur·euse·s.

Découvrir le Cloud Public

La politique HTTP Strict Transport Security permet de protéger les utilisateurs en lui déclarant qu’il doit intéragir avec le serveur web en utilisant une connexion sécurisée.

Sa mise en place passe par l’ajout de headers.

Apache

  • L’ajouter pour tous les sites Apache du compte via les directives globales (menu Web > Configuration > Apache) :
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  • Ou pour chaque site via l’ajout au début du .htaccess créé à la racine des sites :
<IfModule mod_headers.c>

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

</IfModule>

uWSGI

Ajouter dans les paramètres supplémentaires uWSGI (menu Web > Sites > Modifier le [site] - ⚙️ > Configuration avancée) :

plugins = router_redirect
route-if-not = equal:${HTTPS};on redirect-permanent:https://${HTTP_HOST}${REQUEST_URI}
route-if = equal:${HTTPS};on addheader:Strict-Transport-Security: max-age=31536000

Node.js

À mettre avant tout autre controller :

app.use(function(req, res, next) {
  if (req.secure) {
    res.setHeader('Strict-Transport-Security', 'max-age=63072000; includeSubDomains') // 2 years
  }
  next()
})

Autre méthode avec le paquet NPM helmet :

var helmet = require('helmet')
    ... 
    app.use(helmet.hsts({
          maxAge: 31536000000,
          includeSubdomains: true,
          force: true
    }));

Directives

  • max-age définit la période d’application d’une politique HSTS donnée par les navigateurs (31536000 = pour un an) ;
  • includeSubDomains permet d’appliquer HSTS à la fois au domaine et à ses sous-domaines ;
  • preload permet d’autoriser l’ajout du site dans les listes HSTS préchargées.

max-age est obligatoire contrairement aux autres.