CentralCSP
PolitiquesContent-Security-PolicyDirectives

trusted-types

La directive CSP trusted-types définit les noms de Trusted Types policy autorisés sur une page et verrouille qui peut produire des valeurs de confiance.

Dernière mise à jour:

La directive trusted-types contrôle quelles Trusted Types policies une page est autorisée à créer. Seule une Trusted Types policy peut produire une valeur que le navigateur accepte à un sink DOM protégé : cette directive décide donc quelle partie de votre code peut produire ces valeurs.

Désormais cross-browser

Trusted Types est pris en charge depuis peu par les versions actuelles de Chrome, Firefox et Safari, qui gèrent toutes trusted-types. Voir Prise en charge par les navigateurs.

Elle restreint les noms de policy que trustedTypes.createPolicy() peut enregistrer. Le code ne peut créer qu'une policy dont le nom figure dans la liste d'autorisation ; tout autre nom lève une erreur. À elle seule, cette directive n'impose rien aux sinks. Vous protégez les sinks avec require-trusted-types-for ; trusted-types limite ensuite les policies qui existent pour alimenter ces sinks.

Le navigateur donne au nom default une signification spéciale : une policy enregistrée sous default s'exécute automatiquement chaque fois qu'une chaîne atteint un sink protégé sans Trusted Type explicite, c'est donc le point de conversion de repli.

N'autorisez que les noms de policy que votre code crée réellement :

Content-Security-Policy: trusted-types default dompurify

Chaîne de repli

trusted-types n'a pas de repli. default-src ne la couvre pas. (Notez que le token de nom de policy default n'a aucun rapport avec la directive default-src.)

Valeurs

Une liste de tokens de noms de policy autorisés séparés par des espaces, plus ces mots-clés :

ValeurStatutDescription
<policy-name>✅ BonAutorise la création d'une policy portant exactement ce nom.
'none'✅ BonInterdit de créer la moindre policy.
'allow-duplicates'❌ RisquéPermet d'enregistrer plusieurs fois le même nom de policy, ce qui affaiblit la garantie d'une seule policy par nom.
*❌ RisquéAutorise tout nom de policy : n'importe quel script, injecté compris, peut enregistrer une policy et produire des valeurs de confiance.

Dans l'exemple d'ouverture, le token default autorise la policy spéciale par défaut, et dompurify une policy nommée que votre code enregistre pour assainir le balisage. Préférez une liste d'autorisation courte et explicite comme celle-ci à des valeurs larges.

Exemples

Passez Trusted Types en report-only pour découvrir quels noms de policy votre code crée :

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

Contournements et risques connus

La directive limite la création de policies, mais ne regarde pas ce qu'une policy fait : une policy default faible qui renvoie son entrée telle quelle rend le sink à l'attaquant. Autoriser trop de noms, ou *, laisse du code injecté produire ses propres valeurs de confiance, et 'allow-duplicates' affaiblit la garantie qu'un nom correspond à une policy connue. La directive ne prend effet qu'aux côtés de require-trusted-types-for 'script', et les navigateurs antérieurs à la prise en charge de Trusted Types l'ignorent.

Recommandation

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

N'autorisez que les noms de policy que votre code crée réellement et associez la directive à require-trusted-types-for 'script'. Déployez d'abord la paire via un header Report-Only, comme le recommande MDN. Les versions actuelles de Chrome, Firefox et Safari la prenant toutes en charge (caniuse), Trusted Types est désormais viable sur tous les navigateurs.

Reporting

Une tentative de créer un nom de policy hors de la liste d'autorisation (ou une violation détectée en mode report-only) émet un rapport csp-violation nommant trusted-types comme directive effective. Acheminez-le avec la directive report-to et le header Reporting-Endpoints.

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. Firefox et Safari ne l'ont ajoutée que récemment, si bien que les anciennes versions installées ignorent encore la directive.

Voir aussi

Sources

On this page