> For the complete documentation index, see [llms.txt](https://cmp.docs.sirdata.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cmp.docs.sirdata.net/faq/content-security-policy-csp.md).

# Content Security Policy (CSP)

Quelles règles CSP autoriser pour que la CMP Sirdata fonctionne entièrement ?

La **Content Security Policy (CSP)** est une règle de sécurité que votre site envoie au navigateur. Elle liste les domaines depuis lesquels la page a le droit de charger des scripts, des données (JSON), des polices, des images et des styles. Tout ce qui n'y figure pas est bloqué.

Si les domaines de la CMP n'y figurent pas, le navigateur bloque tout ou partie de la CMP.

### ✅ Reconnaître un blocage

Le symptôme dépend de la règle qui bloque :

| Ce que vous constatez                                                                                                           | Règle CSP en cause |
| ------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| La CMP ne s'affiche pas du tout                                                                                                 | `script-src`       |
| La bannière s'affiche, mais l'écran des activités (« Paramétrer vos choix ») est incomplet, ou des partenaires n'ont pas de nom | `connect-src`      |
| La CMP s'affiche sans mise en forme                                                                                             | `style-src`        |
| La CMP n'utilise pas la police choisie dans son thème                                                                           | `font-src`         |
| Le logo ou l'illustration de la CMP n'apparaît pas                                                                              | `img-src`          |

Pour le confirmer, ouvrez la console du navigateur (touche **F12**, onglet **Console**). Chaque blocage y est signalé par un message de ce type :

```
Refused to connect to 'https://api.consentframework.com/api/v1/public/list/gvl/3?...' because it violates the following Content Security Policy directive: "connect-src ..."
```

### ⚙ Les règles à ajouter

Ajoutez ces sources **à la suite de celles qui existent déjà** dans votre CSP :

| Règle         | Sources à ajouter                                                 | Ce qu'elles autorisent                                                                      |
| ------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `script-src`  | `https://*.consentframework.com`                                  | les scripts de la CMP                                                                       |
| `connect-src` | `https://*.consentframework.com`                                  | les textes et la liste des partenaires (JSON), l'enregistrement des choix, les statistiques |
| `font-src`    | `https://*.consentframework.com`                                  | la police du thème de la CMP                                                                |
| `img-src`     | `data:` `https://*.consentframework.com` `https://cdn.sirdata.io` | les icônes, les illustrations du thème, le logo téléversé dans la plateforme                |
| `style-src`   | `'unsafe-inline'`                                                 | la mise en forme de la CMP                                                                  |

Exemple (l'en-tête tient sur une seule ligne, les règles y sont séparées par `;`) :

```http
Content-Security-Policy: script-src 'self' https://*.consentframework.com; connect-src 'self' https://*.consentframework.com; font-src 'self' https://*.consentframework.com; img-src 'self' data: https://*.consentframework.com https://cdn.sirdata.io; style-src 'self' 'unsafe-inline'
```

{% hint style="info" %}
Ajoutez ces sources à vos règles actuelles, sans les remplacer. Si une règle est absente de votre CSP alors que `default-src` est présente, c'est `default-src` qui s'applique à sa place : ajoutez alors la règle manquante en entier.
{% endhint %}

#### Pourquoi `*.consentframework.com` ?

La CMP utilise plusieurs sous-domaines de `consentframework.com`, et le joker `*` les couvre tous. Si votre politique de sécurité interdit les jokers, voici le détail :

| Domaine                         | Rôle                                                                           | Règles                            |
| ------------------------------- | ------------------------------------------------------------------------------ | --------------------------------- |
| `cache.consentframework.com`    | script `stub`                                                                  | `script-src`                      |
| `choices.consentframework.com`  | script `cmp` et son code, polices, illustrations                               | `script-src` `font-src` `img-src` |
| `api.consentframework.com`      | textes et liste des partenaires (JSON), enregistrement des choix, statistiques | `connect-src`                     |
| `mychoice.consentframework.com` | consentement partagé entre plusieurs sites                                     | `connect-src`                     |

### 🧩 Cas particuliers

#### Votre CSP utilise un nonce ou `'strict-dynamic'`

Ajoutez votre nonce aux balises de la CMP. Les scripts qu'elle charge ensuite sont autorisés par `'strict-dynamic'`.

```html
<script nonce="VOTRE_NONCE" src="https://cache.consentframework.com/js/pa/XXXXX/c/YYYYY/stub"></script>
<script nonce="VOTRE_NONCE" src="https://choices.consentframework.com/js/pa/XXXXX/c/YYYYY/cmp" async></script>
```

#### Votre `style-src` utilise un nonce ou un hash

Le navigateur ignore alors `'unsafe-inline'`, et la CMP s'affiche sans mise en forme : elle injecte ses styles sans nonce. `style-src` doit contenir `'unsafe-inline'`, sans nonce ni hash dans la même règle.

#### Vous conditionnez des scripts avec la CMP (`data-cmp-src`)

* Les domaines des scripts que vous conditionnez doivent être autorisés dans votre CSP, comme s'ils étaient chargés directement.
* Si vous conditionnez une **fonction locale** (`data-cmp-src="maFonction"`, voir [Conditionnement d'un script local](/gestion-des-scripts/conditionnement-dun-script-local.md)), `script-src` doit contenir `'unsafe-eval'`. Sans lui, la fonction n'est jamais exécutée.

#### La CMP est chargée par Google Tag Manager

Le [modèle Sirdata](/install-1/via-un-tag-manager/chargement-via-google-tag-manager.md) charge la CMP depuis `https://choices.consentframework.com` : les règles ci-dessus suffisent pour la CMP. Google Tag Manager a ses propres exigences, décrites dans le [guide CSP de Google](https://developers.google.com/tag-platform/security/guides/csp).

Si vous renseignez un **hôte first-party** dans le modèle, ajoutez aussi `https://cdn.sirdata.eu` à `script-src`, et votre hôte comme indiqué ci-dessous.

#### Vous utilisez le conteneur GTM server-side de Sirdata

Votre sous-domaine server-side (par exemple `metrics.votre-site.com`) sert le code de Google Tag Manager et reçoit ses envois de mesure. Avec l'option **Charger le CMP depuis l'hôte server-side**, il sert aussi la CMP : ses scripts, ses textes, la liste des partenaires, ses polices et ses illustrations. Ajoutez-le à ces règles :

| Règle         | Source à ajouter                 | Ce qu'elle autorise                                                                                           |
| ------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `script-src`  | `https://metrics.votre-site.com` | le script d'intégration, Google Tag Manager et les scripts Google servis par le conteneur ; la CMP            |
| `connect-src` | `https://metrics.votre-site.com` | les envois de mesure (Google Analytics…) ; les textes, la liste des partenaires et les statistiques de la CMP |
| `img-src`     | `https://metrics.votre-site.com` | les envois de mesure sous forme d'image ; les illustrations de la CMP                                         |
| `font-src`    | `https://metrics.votre-site.com` | la police du thème de la CMP                                                                                  |
| `frame-src`   | `https://metrics.votre-site.com` | l'iframe du service worker de Google, avec l'option **Autoriser les Service Workers de Google**               |

Quand la CMP est servie par le conteneur, gardez aussi :

* `data:` et `https://cdn.sirdata.io` dans `img-src` : les icônes et le logo téléversé dans la plateforme ;
* `'unsafe-inline'` dans `style-src` : la mise en forme de la CMP ;
* `https://mychoice.consentframework.com` dans `connect-src`, si le consentement est partagé entre plusieurs de vos sites.

Quand la CMP n'est pas servie par le conteneur, appliquez les règles de la CMP décrites plus haut (`https://*.consentframework.com`).

Les balises que Google Tag Manager charge depuis les domaines de Google (Google Ads, Floodlight, etc.) ont leurs propres exigences, décrites dans le [guide CSP de Google](https://developers.google.com/tag-platform/security/guides/csp?hl=fr).

#### La CMP est servie depuis votre propre domaine

[Domaine de consentement](/fonctionnalites-avancees/domaine-de-consentement.md), hôte first-party, CDN personnalisé : ajoutez ce domaine à `script-src`, `connect-src`, `font-src` et `img-src`. Gardez aussi `https://*.consentframework.com` : la CMP s'en sert en secours et pour certains appels.

#### Options qui chargent un script supplémentaire

| Option                                                                                       | Source à ajouter                | Règle        |
| -------------------------------------------------------------------------------------------- | ------------------------------- | ------------ |
| [Amazon Consent Signal](/standards-de-transmission-du-consentement/amazon-consent-signal.md) | `https://c.amazon-adsystem.com` | `script-src` |
| Partenariat data Sirdata : la CMP charge le tag Sirdata après consentement                   | `https://js.sddan.com`          | `script-src` |

#### Le détail des cookies de chaque partenaire

Dans l'écran des partenaires, le lien **plus** des informations de stockage d'un partenaire IAB TCF charge un fichier JSON publié par ce partenaire, sur son propre domaine (par exemple `privacy.criteo.com`). Si `connect-src` bloque ce domaine, le panneau affiche « Informations non disponibles » ; le reste de la CMP fonctionne.

Pour l'afficher, ajoutez à `connect-src` les domaines de vos partenaires (la console du navigateur les liste quand vous ouvrez ces panneaux), ou `https:` si vous acceptez d'autoriser toutes les connexions HTTPS.

### 🔎 Tester et valider

Après modification, rechargez la page (**Ctrl + Maj + R**), puis ouvrez successivement la bannière, **Paramétrer vos choix** et l'écran des partenaires. La console ne doit plus afficher aucun message « Refused to … consentframework.com ».

### 🌟 TL;DR

* **CMP absente, écran des activités incomplet ou partenaires sans nom** ✖ : votre CSP bloque tout ou partie de la CMP
* **Solution** ✔ : ajoutez `https://*.consentframework.com` à `script-src`, `connect-src`, `font-src` et `img-src`, plus `data:` et `https://cdn.sirdata.io` à `img-src`, et `'unsafe-inline'` à `style-src`
* **Conteneur GTM server-side de Sirdata** : ajoutez aussi votre sous-domaine server-side à `script-src`, `connect-src`, `img-src`, `font-src` et `frame-src`
* **Où ?** Dans l'en-tête HTTP `Content-Security-Policy` de votre site
* **Testez** : la console du navigateur ne doit plus rien signaler 🚀

Si vous avez un doute, envoyez cette FAQ à votre développeur (il va comprendre tout de suite). Besoin d’aide ? On est là pour vous ! 💡


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://cmp.docs.sirdata.net/faq/content-security-policy-csp.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
