Vérifiez une Content-Security-Policy directive par directive et voyez comment des scripts la contournent
Fonctionne dans votre navigateur. Rien de ce que vous saisissez n'est envoyé nulle part. Vérifié le 16 octobre 2026.Une Content-Security-Policy indique au navigateur d'où les scripts et autres contenus peuvent être chargés. Elle ne protège contre les scripts injectés que si script-src évite 'unsafe-inline', les jokers et les hôtes contournables, si object-src vaut 'none' et si base-uri est restreint. Une étude de Google de 2016 a montré que 94.7% des politiques réelles pouvaient être contournées ; les nonces avec 'strict-dynamic' règlent ce problème.
Cette page a été traduite automatiquement à partir de l'original anglais. Aucune personne n’a encore relu la traduction : c’est la version anglaise qui fait foi. Lire l'original en anglais
Collez la politique, la ligne d'en-tête Content-Security-Policy complète ou la balise <meta> qui la contient.
Lisez les constats, les plus graves en premier : chacun nomme la directive et ce qu'un attaquant pourrait en faire.
Vérifiez dans le tableau des directives les noms mal orthographiés et les sources que le navigateur ignorera.
Corrigez la politique, ou partez du modèle strict, et collez-la à nouveau jusqu'à ce qu'il ne reste que des remarques.
Il est facile de commettre de petites erreurs dans une Content-Security-Policy, et les navigateurs ne se plaignent jamais : une directive qu'ils ne savent pas lire est ignorée. Cet outil lit la politique exactement comme la spécification CSP Level 3 indique qu'un navigateur le fait, puis l'évalue à la lumière de l'étude de Google de 2016 sur des politiques réelles.
Constats, les plus graves en premier.
| Gravité | Exemples |
|---|---|
| Élevée | 'unsafe-inline' sans nonce, * ou https: dans script-src, object-src différent de 'none', 'strict-dynamic' sans nonce, un point-virgule manquant, self sans guillemets |
| Moyenne | 'unsafe-eval', hôtes autorisés connus pour servir du JSONP ou d'anciennes versions d'AngularJS, base-uri ouvert, sources en http simple, directives inconnues |
| Faible | pas de frame-ancestors, nonces courts, directives obsolètes, doublons, 'unsafe-inline' pour les styles |
| Remarque | pas de signalement, report-uri sans report-to, sources que les navigateurs ignorent avec une politique stricte |
Le repli est appliqué. Lorsque script-src est absent, default-src est évalué à sa place ; lorsque les deux sont absents, les scripts peuvent être chargés de n'importe où, et l'outil le signale.
Collez ce que vous avez. La politique seule, la ligne d'en-tête complète ou une balise <meta http-equiv>. Les politiques fournies dans une balise meta ne peuvent pas utiliser frame-ancestors, report-uri ni sandbox, et l'outil les signale. Un en-tête contenant plusieurs politiques séparées par des virgules est découpé, puisque chacune est appliquée.
Chaque source est vérifiée. Mots-clés, nonces, hachages (avec la bonne longueur pour SHA-256, 384 ou 512), schémas et hôtes sont vérifiés par rapport à la grammaire, et une directive mal orthographiée reçoit une suggestion, par exemple frame-ancestor vers frame-ancestors.
Modèle strict. Un seul geste charge une politique basée sur un nonce : script-src avec un nonce et 'strict-dynamic', object-src 'none' et base-uri 'none'. Votre serveur doit écrire un nouveau nonce aléatoire dans l'en-tête et dans chaque balise script à chaque réponse.
La politique est lue dans votre navigateur et n'est jamais envoyée nulle part. Pour récupérer les en-têtes qu'envoie un site en ligne, utilisez HTTP Headers Checker.
Non. Avec 'unsafe-inline', tout script qu'un attaquant parvient à injecter dans la page s'exécute, ce qu'une Content-Security-Policy existe précisément pour empêcher. Utilisez plutôt un nonce ou un hachage pour chaque script en ligne. Dès qu'un nonce ou un hachage est présent, les navigateurs modernes ignorent 'unsafe-inline' ; le conserver comme repli pour les anciens navigateurs est donc sans danger.
Le mot-clé 'strict-dynamic' permet à un script approuvé via un nonce ou un hachage de charger d'autres scripts, tandis que les listes d'hôtes autorisés et https: sont ignorées par les navigateurs qui le prennent en charge. Associé à un nonce, il donne une politique à la fois stricte et facile à déployer. Sans aucun nonce ni hachage, il bloque tous les scripts.
Les plugins chargés avec les balises object ou embed peuvent exécuter du script en dehors des règles de script-src, et d'anciens fichiers Flash sur des hôtes autorisés étaient un contournement courant. Peu de sites ont encore besoin de plugins, donc object-src 'none' supprime toute cette voie. Si object-src est absent, default-src s'applique, et il ne vaut souvent pas 'none'.
Les hôtes de scripts populaires, comme les grands CDN et certains domaines Google, servent des points de terminaison JSONP ou d'anciennes versions d'AngularJS. Un attaquant capable d'injecter du balisage peut charger ces fichiers autorisés pour exécuter son propre code. L'étude de Google de 2016 a montré que 94.7% des politiques réelles à liste d'hôtes pouvaient être contournées ainsi ; les nonces avec 'strict-dynamic' évitent le problème.
Le navigateur ignore la directive et affiche un avertissement dans la console, mais le reste de la politique s'applique toujours, si bien que la page perd cette protection sans bruit. Une faute comme frame-ancestor au lieu de frame-ancestors laisse la page exposée au clickjacking. Cet outil liste les directives inconnues et suggère le nom que vous vouliez probablement écrire.
Oui, avec une balise meta http-equiv dans le head de la page, mais trois directives n'y fonctionnent pas : frame-ancestors, report-uri et sandbox. Les politiques d'une balise meta ne s'appliquent en outre qu'au contenu situé après la balise. Envoyer la politique dans un en-tête de réponse HTTP est le choix fiable ; la balise meta convient à l'hébergement statique sans contrôle des en-têtes.
Les taux et les règles changent ; vérifiez la source avant de vous fier à un chiffre.
Toujours bloqué ? Poser une question sur Analyseur CSP et toute personne qui connaît la réponse peut répondre. Aucun compte nécessaire.