Defaults.Exposed

Defaults.ExposedCorrections › Content-Security-Policy (CSP)

Comment corriger Content-Security-Policy (CSP)

Une Content Security Policy est une règle de sécurité que votre site web remet au navigateur de chaque visiteur, lui indiquant exactement quel code est autorisé à s'exécuter. Sans elle, si du code malveillant atterrit un jour sur une page — via une zone de commentaires, une extension piratée, ou un script tiers — le navigateur l'exécutera librement, y compris du code qui copie discrètement les numéros de carte et mots de passe de vos clients pendant qu'ils les saisissent, le cadenas toujours affiché.

En clair, pour votre entreprise : Si votre site est un jour falsifié, du code malveillant peut lire les coordonnées bancaires et identifiants de vos clients directement depuis votre propre page de commande pendant que tout paraît parfaitement normal — vous laissant avec des rétrofacturations, des plaintes pour fraude, une violation de données à déclarer, et un échec à un contrôle que les équipes sécurité des clients plus importants utilisent pour faire caler ou tuer une affaire.

Ce que cela peut vous coûter

Pourquoi c'est important. Le cadenas prouve que la connexion à votre site est privée, mais il ne fait rien pour contrôler quel code s'exécute une fois le visiteur sur la page. Une Content Security Policy est la protection qui le fait — elle dit aux navigateurs d'ignorer tout script qui ne provient pas d'une source de confiance, de sorte qu'un seul champ, une seule publicité ou une seule extension falsifiés ne puissent être transformés en outil pour voler l'argent et les données de vos clients. C'est un contrôle noté sur votre tableau de bord, valant de vrais points, et l'une des premières choses qu'une revue de sécurité professionnelle recherche.

Ce que c’est, en clair

Quand quelqu’un visite votre site web, son navigateur télécharge votre page et exécute tout le code qui s’y trouve — les scripts qui font dérouler les menus, fonctionner les boutons, soumettre les formulaires de paiement, et ainsi de suite. Par défaut, le navigateur fait confiance à tout. Il n’a aucun moyen de savoir quel code est authentiquement le vôtre et lequel a été glissé par quelqu’un d’autre.

Une Content Security Policy (souvent abrégée en CSP) est une courte liste de règles que votre site web attache à chaque page, disant au navigateur : « n’exécute que le code provenant de ces sources que j’ai approuvées, et refuse tout le reste. » C’est la différence entre une boîte de nuit qui laisse entrer n’importe qui et une autre avec une liste d’invités à l’entrée.

La raison pour laquelle cela compte tant, c’est que les sites web sont falsifiés en permanence — pas toujours en piratant votre serveur, mais par les portes dérobées que la plupart des sites laissent ouvertes : un champ de commentaire, une zone de recherche, une extension obsolète, un script tiers pour la publicité ou l’analyse, ou un widget de discussion. Si un attaquant parvient à placer ne serait-ce qu’une ligne de son propre code sur l’une de vos pages, le navigateur l’exécute comme s’il était le vôtre. À partir de là, il peut lire tout ce que vos clients saisissent — numéros de carte, mots de passe, adresses — et l’envoyer discrètement ailleurs. Une Content Security Policy ferme cette porte en refusant d’exécuter quoi que ce soit provenant d’une source que vous n’avez pas approuvée.

Ce que cela peut vous coûter

Ce n’est pas abstrait. L’attaque qu’une Content Security Policy prévient — du code injecté dans une page qui vole les données de vos propres clients — est derrière certaines des plus grandes violations de vol de cartes enregistrées. Voici comment cela tend à se dérouler pour une entreprise ordinaire :

Ce que c’est réellement (le détail)

Une Content Security Policy est livrée sous la forme d’un seul en-tête de réponse HTTP — une ligne que votre serveur web envoie avec chaque page. Sa valeur est un ensemble de directives, chacune nommant un type de contenu et les sources autorisées pour lui. Par exemple :

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'

En clair, cela dit : par défaut, ne charge que les choses provenant de mon propre site ; n’exécute des scripts que de mon propre site ; n’autorise aucune extension à l’ancienne ; et ne laisse pas d’autres sites intégrer le mien dans un cadre.

À quoi ressemble le « bon » réglage. Notre contrôle ne se contente pas de chercher la présence de l’en-tête — il lit la politique directive par directive et note sa robustesse réelle, comme le ferait un examinateur de sécurité. Une politique forte :

Une politique qui existe mais s’appuie sur 'unsafe-inline', 'unsafe-eval' ou des jokers obtiendra quand même une note médiocre — car en pratique elle n’offre qu’une faible protection réelle. Le but est une politique serrée, pas juste une politique quelconque.

Comment corriger (gratuit, ~1 à 2 heures)

Transmettez ceci à votre informaticien ou à la personne qui gère votre site web — la correction elle-même est entièrement gratuite. Nous facturons uniquement la surveillance de son maintien en place et de sa justesse dans le temps ; l’activer ne coûte rien. La raison pour laquelle cela prend une heure ou deux plutôt que quelques minutes est l’étape d’essai prudente qui l’empêche de bloquer accidentellement des parties de votre propre site.

  1. Commencez en mode report-only — n’imposez pas encore. Ajoutez un en-tête de réponse Content-Security-Policy-Report-Only. Il observe et journalise ce qui serait bloqué sans rien bloquer réellement, de sorte que le site en direct continue de fonctionner pendant que vous apprenez ce dont chaque page dépend véritablement. (Important : le report-only à lui seul n’offre aucune protection aux visiteurs — ce n’est que la première étape sûre.)

  2. Construisez la politique à partir de ce que votre site utilise réellement. Examinez les rapports pour trouver chaque source légitime de scripts, styles, polices et images — votre propre domaine, votre analyse, votre prestataire de paiement, votre hébergeur de polices, votre widget de discussion — et listez-les comme sources autorisées. Un bon point de départ est default-src 'self' plus des entrées explicites pour les tiers de confiance que vous utilisez réellement.

  3. Évitez les failles qui anéantissent tout l’intérêt. Tenez-vous à l’écart de 'unsafe-inline' et 'unsafe-eval' pour les scripts, et évitez les sources joker comme * et les schémas nus comme https: pour les scripts — ceux-ci rouvrent exactement la brèche que la politique est censée fermer. Là où des scripts en ligne sont inévitables, utilisez un nonce ou un hachage pour que seul votre code approuvé précis s’exécute.

  4. Verrouillez l’encadrement et les extensions. Ajoutez frame-ancestors 'self' (cela empêche aussi d’autres sites d’intégrer le vôtre pour piéger vos clients, et satisfait le contrôle de clickjacking associé) et object-src 'none' pour bloquer les attaques à base d’extensions héritées.

  5. Passez de report-only à application. Une fois les rapports propres et le site fonctionnel, changez le nom de l’en-tête de Content-Security-Policy-Report-Only à Content-Security-Policy. C’est l’étape qui délivre réellement la protection — une politique en report-only seul ne le fait pas, et ne réussira pas le contrôle.

    L’endroit où vous définissez l’en-tête dépend de votre plateforme :

    • Cloudflare : Rules → Transform Rules → Modify Response Header → définissez Content-Security-Policy. (Vous pouvez aussi utiliser Cloudflare pour l’essai report-only.)
    • Nginx : add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" always;
    • Apache : Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';"
    • IIS (web.config) : ajoutez un en-tête de réponse HTTP personnalisé nommé Content-Security-Policy avec la politique comme valeur.
    • Google Workspace / Microsoft 365 : ceux-ci font tourner votre messagerie, pas votre site web public, donc la politique se définit là où votre site est réellement hébergé (Cloudflare ou votre hébergeur web ci-dessus), et non dans votre console d’administration de messagerie.
  6. Recontrôlez votre domaine pour confirmer que la politique apparaît désormais comme activée et en application, sans failles d’affaiblissement.

Erreurs fréquentes

FAQ

Je ne suis pas technique — puis-je m'en occuper moi-même ?

Vous n'avez pas besoin de comprendre les détails. C'est un réglage ajouté par la personne qui gère votre site web ou votre hébergement, et sur des services comme Cloudflare c'est largement guidé. Transmettez-leur la section « Comment corriger » ci-dessous. C'est gratuit ; la seule précaution est qu'il faut le déployer prudemment d'abord en mode surveillance seule pour ne pas bloquer accidentellement des parties de votre propre site — ce que couvrent justement les étapes.

J'ai déjà le cadenas et un certificat SSL — mon site n'est-il pas sécurisé ?

Le cadenas sécurise la livraison de votre page ; il ne contrôle pas ce qui s'exécute à l'intérieur. Si du code malveillant finit un jour sur une page — via une extension piratée, une publicité compromise, ou un champ injecté — le cadenas ne l'empêchera pas de voler des données. Une Content Security Policy est la couche qui limite ce qui est autorisé à s'exécuter en premier lieu. Ils protègent des choses différentes, et vous voulez les deux.

Activer cela pourrait-il casser mon site ?

C'est possible si on l'active agressivement d'un seul coup, car cela peut bloquer des scripts légitimes que vous utilisez réellement. C'est pourquoi l'approche standard consiste à commencer en mode « report-only » (surveillance) qui observe sans bloquer, à corriger tout ce qu'il signale, et seulement alors à l'imposer. Fait ainsi, c'est sans danger — et l'étape d'essai est intégrée à la correction ci-dessous.

Nous l'avons déjà mis en mode « report-only » — sommes-nous couverts ?

Non, et c'est le faux sentiment de sécurité le plus fréquent. Le mode report-only observe et journalise ce qui serait bloqué, mais il ne bloque rien — les visiteurs n'ont aucune protection réelle. Ce n'est que la première étape sûre. Notre contrôle n'attribue au report-only qu'une petite fraction du crédit d'une vraie politique et ne l'enregistrera pas comme une réussite. Vous n'êtes protégé qu'une fois passé en mode d'application.

Cela affecte-t-il notre score, ou est-ce juste consultatif ?

Cela affecte votre score. Le contrôle Content Security Policy est noté et vaut jusqu'à 25 points dans la catégorie Sécurité web. Une politique absente ou faible est classée en gravité élevée et tire votre note vers le bas — et c'est exactement le genre de lacune sur laquelle porte le questionnaire de sécurité d'un client.

Notre développeur a ajouté une politique mais le score reste bas — pourquoi ?

Une politique peut exister tout en étant faible. Les coupables les plus fréquents sont des failles comme « unsafe-inline » et « unsafe-eval » pour les scripts, ou des sources joker (un simple *), qui rouvrent exactement la brèche que la politique est censée fermer. Notre contrôle lit la politique directive par directive et pénalise ces faiblesses — une politique qui autorise n'importe quoi ne vaut guère mieux que pas de politique du tout. La correction consiste à durcir les règles de scripts à l'aide de nonces ou de hachages au lieu de ces failles.