Aller au contenu principal
Security Headers Scanner
L'observatoire des en-têtes de
sécurité de vos sites internet
Analyses totales 15210
Score moyen 38,70
Sites analysés 2013
Meilleur score 155

Content-Security-Policy (CSP)

Indiquer au navigateur quels contenus il peut charger ou exécuter afin de bloquer les contenus inattendus ou malveillants.

Comprendre Content-Security-Policy

Content-Security-Policy, souvent abrégé en CSP, est une règle de sécurité envoyée par un site web au navigateur.

Elle indique au navigateur quels contenus sont autorisés à être chargés ou exécutés : scripts JavaScript, feuilles de style, images, polices, vidéos, contenus intégrés ou connexions vers des services externes.

On peut voir CSP comme une liste d’autorisation : les contenus prévus par le site peuvent fonctionner, tandis que ceux provenant d’une source non autorisée peuvent être bloqués par le navigateur.

Pourquoi est-ce important ?

Une page web utilise souvent des ressources provenant de plusieurs endroits : le site lui-même, un CDN, un service de statistiques, une police externe, une vidéo ou encore différents services tiers.

Si un contenu malveillant parvient à être injecté dans la page, le navigateur pourrait tenter de le charger ou de l’exécuter. Une CSP correctement configurée permet de refuser les contenus qui ne correspondent pas aux sources ou aux comportements autorisés.

Elle constitue notamment une protection importante contre certaines conséquences des attaques de type XSS (Cross-Site Scripting), dans lesquelles du code malveillant peut être injecté puis exécuté dans une page légitime.

Comment ça fonctionne ?

Le serveur ajoute un en-tête HTTP nommé Content-Security-Policy dans sa réponse.

Cet en-tête contient différentes règles appelées directives. Chacune indique au navigateur ce qui est autorisé pour un type de contenu particulier.

Le navigateur applique ensuite ces règles lorsqu’il affiche la page. Si une ressource ou une action ne respecte pas la politique définie, elle peut être bloquée.

Configurer une CSP

Un exemple simple

Voici un exemple volontairement très simple :

Content-Security-Policy: default-src 'self';

La valeur 'self' signifie ici que les ressources doivent provenir du même site.

Dans un site réel, la politique doit généralement être plus détaillée afin d’autoriser précisément les ressources réellement nécessaires tout en refusant les autres.

Les principales directives

default-src

Définit la règle générale utilisée lorsqu’aucune directive plus précise n’est indiquée.

script-src

Indique quelles sources sont autorisées à fournir ou exécuter des scripts JavaScript.

style-src

Définit les sources autorisées pour les feuilles de style CSS.

img-src

Contrôle les sources depuis lesquelles les images peuvent être chargées.

font-src

Détermine les sources autorisées pour les polices de caractères.

connect-src

Encadre les connexions effectuées par la page vers des API ou des services externes.

frame-src

Définit quels contenus externes peuvent être intégrés dans des cadres comme les iframes.

frame-ancestors

Indique quels sites ont le droit d’intégrer la page courante dans une iframe. Cette directive permet notamment de lutter contre le clickjacking.

object-src

Contrôle certains contenus intégrés plus anciens ou spécifiques, comme les objets externes.

base-uri

Permet de limiter les adresses pouvant être utilisées comme base pour les liens relatifs de la page.

form-action

Détermine vers quelles adresses les formulaires de la page peuvent envoyer des données.

Mettre en place une CSP sans casser le site

Une CSP doit être adaptée au fonctionnement réel du site. Si une ressource légitime n’est pas autorisée, le navigateur peut la bloquer.

Une mauvaise configuration peut par exemple :

  • empêcher un script JavaScript de fonctionner ;
  • bloquer une feuille de style ou une police ;
  • empêcher l’affichage d’une image ou d’une vidéo ;
  • bloquer une connexion vers une API ou un service externe nécessaire au site.

Ce risque ne doit toutefois pas conduire à renoncer à CSP. La politique doit être préparée, testée puis progressivement renforcée jusqu’à obtenir une configuration adaptée.

Commencer avec Report-Only

Pour préparer une politique sans bloquer immédiatement les ressources du site, il existe un en-tête appelé :

Content-Security-Policy-Report-Only

Ce mode permet au navigateur de constater les violations de la politique sans appliquer immédiatement les blocages.

Il est ainsi possible d’identifier les ressources ou comportements qui poseraient problème, puis d’ajuster progressivement la configuration.

Report-Only est une étape de préparation.
Il ne remplace pas une véritable Content-Security-Policy. Une fois la politique testée et validée, elle doit être activée afin que le navigateur bloque réellement les contenus non autorisés.

Bonnes pratiques et limites

Bonnes pratiques

  • Mettre en place une Content-Security-Policy adaptée au fonctionnement réel du site.
  • Autoriser uniquement les sources réellement nécessaires.
  • Éviter les règles trop larges ou trop permissives.
  • Tester la politique avant son activation complète.
  • Utiliser Content-Security-Policy-Report-Only pendant la phase de préparation lorsqu’une politique doit être ajustée progressivement.
  • Une fois la politique validée, l’activer réellement avec Content-Security-Policy.
  • Réexaminer régulièrement la politique, notamment lorsque le site ajoute ou retire des scripts, des services externes, des API ou d’autres ressources.

Ce que CSP ne remplace pas

CSP est une couche de protection supplémentaire essentielle, mais elle ne remplace pas :

  • la sécurité du code ;
  • les mises à jour du site, du CMS et de ses dépendances ;
  • une configuration correcte du serveur ;
  • les autres protections de sécurité nécessaires au site.

Une CSP correctement configurée peut empêcher ou limiter de nombreuses attaques liées au chargement ou à l’exécution de contenus non prévus. Elle doit donc être considérée comme une protection à mettre en place, et non comme une option facultative.

À retenir : Content-Security-Policy permet au site de définir précisément les contenus que le navigateur est autorisé à charger ou exécuter. Une politique bien conçue constitue une barrière importante contre les contenus inattendus ou malveillants.
Si sa mise en place nécessite des ajustements, Content-Security-Policy-Report-Only permet de préparer progressivement la politique avant son activation réelle.