# require-trusted-types-for (/fr/docs/web-security/policies/content-security-policy/directives/require-trusted-types-for)



La directive `require-trusted-types-for` active l'application de Trusted Types aux sinks DOM dangereux du navigateur. Une fois en place, affecter une simple chaîne à un sink comme `innerHTML` ou `eval` lève une erreur au lieu de s'exécuter, ce qui ferme la plupart des cross-site scripting (XSS) basés sur le DOM.

<Callout type="info" title="Désormais cross-browser">
  La prise en charge de Trusted Types est récemment devenue disponible dans les versions actuelles de Chrome, Firefox et Safari, qui appliquent tous `require-trusted-types-for`. Voir [Prise en charge par les navigateurs](#prise-en-charge-par-les-navigateurs).
</Callout>

Elle contrôle si le navigateur exige un Trusted Type (plutôt qu'une chaîne brute) au niveau des sinks d'injection. Les sinks sont les API qui analysent une chaîne en code ou en balisage exécutable, comme `Element.innerHTML`, `document.write`, `eval` et l'affectation de `src` de script. Lorsque l'application est activée, passer une chaîne à l'une d'elles lève un `TypeError` ; seule une valeur produite par une Trusted Types policy enregistrée est acceptée.

Cela fonctionne de concert avec la directive [`trusted-types`](/fr/docs/web-security/policies/content-security-policy/directives/trusted-types), qui contrôle quels noms de policy peuvent être créés. `require-trusted-types-for` décide que les sinks sont protégés ; `trusted-types` décide qui peut produire les valeurs de confiance.

Activez l'application à chaque sink lié aux scripts :

```http
Content-Security-Policy: require-trusted-types-for 'script'
```

## Chaîne de repli [#chaîne-de-repli]

`require-trusted-types-for` n'a pas de repli. `default-src` ne la couvre pas, donc elle ne s'applique que lorsqu'elle est listée.

## Valeurs [#valeurs]

Un seul token de groupe de sinks, `'script'`. Il impose Trusted Types pour les sinks liés aux scripts.

| Valeur     | Statut | Description                                                                                              |
| ---------- | ------ | -------------------------------------------------------------------------------------------------------- |
| `'script'` | ✅ Bon  | Exige un Trusted Type à chaque sink DOM lié aux scripts ; l'affectation de chaîne brute lève une erreur. |

Une configuration stricte typique l'associe à `trusted-types` pour nommer les policies autorisées :

```http
Content-Security-Policy:
    require-trusted-types-for 'script';
    trusted-types default dompurify
```

## Exemples [#exemples]

Passez d'abord par le mode report-only pour repérer les sinks que votre code touche avant d'appliquer :

```http
Content-Security-Policy-Report-Only:
    require-trusted-types-for 'script';
    report-to csp-endpoint
```

## Notes de sécurité [#notes-de-sécurité]

Elle protège contre le DOM XSS, la classe de XSS où des données contrôlées par l'attaquant atteignent un sink via du JavaScript côté client plutôt que via le HTML du serveur. L'encodage de sortie côté serveur ne l'attrape pas. En forçant chaque affectation de sink à passer par une policy vérifiée, le navigateur empêche une chaîne brute d'atteindre jamais le parseur.

## Contournements et risques connus [#contournements-et-risques-connus]

Les navigateurs antérieurs à la prise en charge de Trusted Types ignorent la directive, alors gardez le reste d'une politique stricte en place plutôt que de compter sur elle seule. L'activer sans auditer la base de code casse toute fonctionnalité qui écrit des chaînes dans un sink, donc la plupart des équipes commencent le déploiement en report-only avec [Content-Security-Policy-Report-Only](/fr/docs/web-security/policies/content-security-policy/report-only). Une policy `default` mal écrite qui laisse passer l'entrée telle quelle réintroduit le sink même qu'elle devait protéger.

## Recommandation [#recommandation]

```http
Content-Security-Policy:
    require-trusted-types-for 'script';
    trusted-types default dompurify
```

Déployez `require-trusted-types-for 'script'`, d'abord via un header Report-Only pour repérer les sinks que votre code touche, comme le recommande MDN. Avec les versions actuelles de Chrome, Firefox et Safari qui livrent toutes l'application (caniuse), la directive est désormais viable sur tous les navigateurs.

## Reporting [#reporting]

Une affectation de sink que la directive bloque (ou bloquerait en mode report-only) émet un [rapport `csp-violation`](/fr/docs/web-security/reporting-api/reports/csp-violation) nommant `require-trusted-types-for` comme directive effective. Câblez la livraison avec la directive [`report-to`](/fr/docs/web-security/policies/content-security-policy/directives/report-to) et le [header `Reporting-Endpoints`](/fr/docs/web-security/reporting-api/headers/reporting-endpoints).

## Prise en charge par les navigateurs [#prise-en-charge-par-les-navigateurs]

Prise en charge sur tous les navigateurs : les versions actuelles de Chrome (ainsi qu'Edge et Opera basés sur Chromium), Firefox et Safari. La prise en charge de Firefox et Safari est arrivée récemment, donc les anciennes versions installées ignorent encore la directive.

## Voir aussi [#voir-aussi]

* [Directive trusted-types](/fr/docs/web-security/policies/content-security-policy/directives/trusted-types)
* [Mots-clés et valeurs CSP](/fr/docs/web-security/policies/content-security-policy/values/csp-keywords)
* [Comment activer Trusted Types](/fr/blog/enable-trusted-types)
* [Trusted Types et eval en CSP](/fr/blog/trusted-types-eval-csp)

## Sources [#sources]

* [MDN, CSP require-trusted-types-for](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/require-trusted-types-for)
* [W3C, Content Security Policy Level 3](https://www.w3.org/TR/CSP3/)
* [W3C, Trusted Types](https://www.w3.org/TR/trusted-types/)
* [caniuse, Trusted Types](https://caniuse.com/trusted-types)
