La CSP (Content Security Policy), ou Politique de sécurité du contenu, est une couche de sécurité supplémentaire pour les sites Web. Elle vise à détecter et à bloquer les attaques courantes telles que les attaques XSS (Cross-Site Scripting) et les injections de code. La CSP fonctionne comme une liste blanche, définissant les sources autorisées pour les scripts, les styles, les images et les iframes. Seules les ressources explicitement autorisées peuvent être chargées ; toute requête non conforme à la liste blanche est immédiatement bloquée. Les navigateurs non compatibles avec la CSP fonctionnent normalement avec un serveur l’implémentant, et inversement. Si un navigateur n’est pas compatible, la CSP est ignorée et le site Web applique sa politique par défaut.
La CSP fonctionne en ajoutant l’en-tête HTTP Content-Security-Policy
à la réponse du serveur. Cet en-tête contient un ensemble de directives spécifiant le type de contenu autorisé et sa provenance. Par exemple, la directive script-src
définit l’origine des fichiers JavaScript autorisés.
La CSP comprend plusieurs directives, chacune contrôlant un type de ressource spécifique. Voici quelques directives courantes :
default-src
: S’applique à tous les types de ressources si aucune directive spécifique n’est définie.script-src
: Contrôle le chargement des fichiers JavaScript.style-src
: Contrôle le chargement des fichiers CSS.img-src
: Contrôle le chargement des images.font-src
: Contrôle le chargement des polices.frame-src
: Contrôle le chargement des iframes.object-src
: Contrôle le chargement des objets intégrés tels que Flash.media-src
: Contrôle le chargement des fichiers multimédias comme l’audio et la vidéo.
Chaque directive peut accepter une ou plusieurs valeurs, notamment :
'self'
: Autorise le chargement des ressources de la même origine que le site Web.'none'
: N’autorise le chargement d’aucune ressource.'unsafe-inline'
: Autorise l’utilisation de code en ligne comme<script>
ou du style en ligne. Déconseillé car cela réduit l’efficacité de la CSP.- Une URL spécifique : Autorise le chargement des ressources à partir de l’URL spécifiée.
- Un nom de domaine : Autorise le chargement des ressources de tous les sous-domaines du domaine spécifié. Par exemple,
example.com
autorise le chargement des ressources dewww.example.com
,sub.example.com
, etc. *
: Caractère générique, autorise le chargement des ressources de n’importe quelle source. Déconseillé car cela désactive la plupart des fonctionnalités de sécurité de la CSP.data:
: Autorise le chargement des ressources à partir des URI de données.https:
: Autorise le chargement des ressources de toute source utilisant HTTPS.
Exemple d’une CSP simple :
Content-Security-Policy: default-src 'self'; img-src 'self' data:; script-src 'self' https://example.com;
Cette CSP autorise :
- Le chargement de tous les types de ressources (sauf les images et les scripts) de la même origine que le site Web.
- Le chargement des images de la même origine ou des URI de données.
- Le chargement des scripts de la même origine ou de
https://example.com
.
Pour surveiller les violations de la CSP, vous pouvez utiliser la directive report-uri
ou report-to
. Cette directive permet au navigateur d’envoyer des rapports sur les violations de la CSP à une URL spécifiée. Des services comme report-uri.com
offrent une interface pour collecter et analyser ces rapports, vous aidant à mieux comprendre les failles de sécurité de votre site Web.
Une implémentation correcte de la CSP peut réduire considérablement les risques d’attaques XSS et d’injection, protégeant ainsi votre site Web et vos utilisateurs contre les menaces de cybersécurité.