Poser une première CSP sur un site vitrine
Partez du modèle strict, ajoutez uniquement vos CDN et votre API dans script-src et connect-src, puis déployez d’abord en Report-Only pour repérer ce qui serait bloqué.
Composez une Content Security Policy à partir de modèles (strict, analytics, permissif), ajustez chaque directive, activez Report-Only ou upgrade-insecure-requests et récupérez le header HTTP ou la balise meta, avec des alertes sur unsafe-inline, unsafe-eval et les jokers.
Génère un header de surveillance qui ne bloque pas les ressources.
Séparez les sources par des espaces ou des virgules.
Le générateur de CSP vous aide à écrire l’en-tête Content-Security-Policy qui indique au navigateur quelles sources de scripts, styles, images ou connexions votre site autorise. Il s’adresse aux développeurs, intégrateurs et administrateurs qui veulent réduire l’impact d’une faille XSS sans mémoriser la syntaxe des directives.
Une CSP (W3C Content Security Policy Level 3) est une liste de directives séparées par des points-virgules, chacune suivie de ses sources : `default-src 'self'; script-src 'self' https://www.googletagmanager.com; object-src 'none'; base-uri 'self'`. Les mots-clés comme `'self'`, `'none'`, `'unsafe-inline'` doivent être entre apostrophes, les hôtes et schémas (`https:`, `data:`) non. Les directives de récupération (script-src, img-src, connect-src…) héritent de default-src lorsqu’elles sont absentes, mais base-uri, form-action et frame-ancestors n’en héritent pas : c’est pourquoi l’outil signale leur absence.
L’outil assemble les valeurs saisies, supprime les doublons et les champs vides, puis produit trois sorties : la politique brute, l’en-tête `Content-Security-Policy` (ou `Content-Security-Policy-Report-Only` en mode surveillance) et une balise `<meta http-equiv>`. Il analyse ensuite la politique et avertit si default-src, object-src ou base-uri manquent, ou si `'unsafe-inline'`, `'unsafe-eval'` ou le joker `*` affaiblissent la protection. La directive upgrade-insecure-requests, sans valeur, demande au navigateur de charger en HTTPS les ressources référencées en HTTP.
Sélectionnez Strict, Avec analytics, Permissif ou Personnalisé, et activez si besoin le mode Report-Only pour obtenir un en-tête de surveillance non bloquant.
Complétez les champs default-src, script-src, style-src, img-src, connect-src, frame-ancestors… en séparant les sources par des espaces ou des virgules, et activez upgrade-insecure-requests si nécessaire.
Cliquez sur « Générer la CSP », lisez les alertes affichées, puis copiez ou exportez l’en-tête HTTP, la balise meta ou la politique brute.
Partez du modèle strict, ajoutez uniquement vos CDN et votre API dans script-src et connect-src, puis déployez d’abord en Report-Only pour repérer ce qui serait bloqué.
Le modèle « Avec analytics » ajoute googletagmanager.com et google-analytics.com aux bonnes directives, à compléter selon les balises réellement chargées.
Un scanner signale « Content-Security-Policy manquant » ou « unsafe-inline autorisé » : reconstruisez la politique et vérifiez qu’aucune alerte ne subsiste avant de la remettre en production.
Entrée
Directives : default-src = 'self' ; object-src = 'none' ; base-uri = 'self' ; Mode Report-Only : désactivéRésultat
Header HTTP : Content-Security-Policy: default-src 'self'; object-src 'none'; base-uri 'self' ; aucun avertissementElle ne corrige pas la faille, mais elle limite fortement ce qu’un script injecté peut faire en bloquant les scripts inline et les domaines non autorisés. Une CSP qui contient 'unsafe-inline' dans script-src perd l’essentiel de cette protection. OWASP la présente comme une défense en profondeur, en complément de l’échappement des données.
L’en-tête HTTP est préférable : il s’applique dès le début du chargement et prend en charge toutes les directives. La balise meta dépanne sur un hébergement statique sans accès aux en-têtes, mais elle ignore frame-ancestors, report-uri et sandbox, et ne protège que le contenu situé après elle.
Ajoutez à script-src un nonce (`'nonce-valeurAléatoire'` régénéré à chaque réponse et repris dans l’attribut nonce de la balise) ou le hash du script (`'sha256-…'`, Base64 du SHA-256 du contenu exact). Vous pouvez saisir ces valeurs directement dans le champ script-src ; le hash se calcule avec un générateur SRI ou de hash.
Non. 'self' correspond uniquement à la même origine : même schéma, même hôte et même port. Pour autoriser cdn.example.com ou tous les sous-domaines, ajoutez explicitement `https://cdn.example.com` ou `https://*.example.com`.
L’en-tête Content-Security-Policy-Report-Only applique la même politique sans rien bloquer : le navigateur se contente de signaler les violations dans la console et, si vous ajoutez une directive report-to ou report-uri, de les envoyer à votre point de collecte. Il permet d’ajuster la politique avant de basculer vers l’en-tête bloquant.
Oui, frame-ancestors est le remplaçant moderne de X-Frame-Options et il est prioritaire dans les navigateurs qui le prennent en charge : `frame-ancestors 'none'` équivaut à DENY. Beaucoup de sites conservent les deux pour les anciens clients. Il ne fonctionne qu’en en-tête HTTP, pas dans une balise meta.
Outils associés
Des outils similaires ou complémentaires à celui-ci.
Générez HSTS, nosniff, Referrer-Policy, Permissions-Policy, COOP/COEP/CORP et X-Frame-Options pour Nginx ou Apache.
Générez l’attribut integrity SRI d’un script ou d’une feuille de style, depuis un contenu, un fichier ou une URL de CDN.
Analysez des en-têtes HTTP pour vérifier la sécurité, le cache, CORS et les cookies d’une réponse.
Apprenez à construire une CSP progressive, comprendre ses directives et éviter les politiques trop permissives ou cassantes.
Comprenez les différentes couches de sécurité d’un site Web : HTTPS, en-têtes HTTP, CSP, SRI, authentification, mots de passe et intégrité.
Comprenez comment OAuth 2.0, PKCE, JWT, JWK et JWKS s’articulent sans les confondre : autorisation, jetons, clés publiques et vérification.