HSTS et CSP
Sécurisation des communications et protection contre les attaques Web
Notions théoriques
Les sites Web modernes doivent protéger les utilisateurs contre diverses attaques.
3 mécanismes de sécurité HTTP permettent d'améliorer la protection des communications et des données :
- HSTS (HTTP Strict Transport Security) : Oblige un navigateur à utiliser HTTPS pour éviter les attaques de type "downgrade" vers HTTP.
- CSP (Content Security Policy) : Protège contre les attaques XSS (Cross-Site Scripting) en limitant les sources de contenu autorisées.
Il existe un ancien mécanisme, le HPKP (HTTP Public Key Pinning)** qui permettait de lier un site Web à une clé publique spécifique pour prévenir les attaques par faux certificats.
HPKP a été abandonné car une mauvaise configuration pouvait bloquer l'accès à un site de manière irréversible.
HSTS : Protection contre les attaques downgrade
HSTS est un en-tête HTTP qui force l'utilisation de HTTPS. Lorsqu'un navigateur visite un site avec HSTS activé, il enregistre cette règle et refusera toute connexion en HTTP.
Fonctionnement :
- Le serveur envoie l'en-tête
Strict-Transport-Securityavec une durée (max-age). - Le navigateur applique cette règle pour toutes les connexions futures.
- Toute tentative de connexion en HTTP est automatiquement redirigée vers HTTPS.
Exemple d'en-tête HSTS :
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
CSP : Protection contre les attaques XSS
CSP est un en-tête HTTP qui contrôle les sources de contenu autorisées sur une page Web.
L'en-tête HTTP CSP empêche l'exécution de scripts malveillants injectés par un attaquant.
Fonctionnement :
- Le serveur envoie une politique CSP définissant les sources autorisées.
- Le navigateur bloque tout contenu ne respectant pas cette politique.
Exemple d'en-tête CSP :
Content-Security-Policy: default-src 'self'; script-src 'self' https://apis.example.com
Cette règle autorise uniquement les scripts provenant du même domaine ('self') et de apis.example.com.
Exemple pratique
Il est possible de tester HSTS et CSP en configurant un serveur Web et en observant le comportement du navigateur.
1) Configuration de HSTS
- Modifier la configuration du serveur (Apache ou Nginx).
- Ajouter l'en-tête HSTS :
sous apache
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
sous nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
- Redémarrer le serveur et tester avec Chrome en tapant
chrome://net-internals/#hsts.
2) Test de HSTS
- Accéder au site en HTTP (
http://example.com). - Vérifier que la redirection vers HTTPS est automatique.
3) Configuration de CSP
- Ajouter l'en-tête CSP :
sous apache
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://apis.example.com"
sous nginx
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://apis.example.com";
- Tester en insérant un script non autorisé dans la console du navigateur.
4) Observation des violations CSP
- Ouvrir la console du navigateur (F12 > Console).
- Essayer d'exécuter un script inline :
alert("Test CSP");
- Observer si le navigateur bloque l'exécution.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
L'objectif de ce TP est d'analyser le comportement de HSTS et CSP sur un site Web en utilisant un navigateur et les outils de développement.