Comment implémenter HSTS
La politique HTTP Strict Transport Security permet de protéger les utilisateurs en déclarant aux navigateurs qu’ils doivent interagir 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
.htaccesscréé à 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=31536000Node.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-agedéfinit la période d’application d’une politique HSTS par les navigateurs (31536000 = pour un an) ;includeSubDomainspermet d’appliquer HSTS à la fois au domaine et à ses sous-domaines ;preloadpermet d’autoriser l’ajout du site dans les listes HSTS préchargées.
max-age est obligatoire contrairement aux autres.
- RFC 6797
- Vérifier sa configuration HSTS via HSTS preload