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. Une Trusted Types policy est la seule chose qui peut produire une valeur que le navigateur accepte à un sink DOM protégé, donc cette directive décide qui, dans votre code, peut produire ces valeurs.

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 prennent tous en charge trusted-types. Voir Prise en charge par les navigateurs.

Elle restreint l'ensemble des 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 ; toute tentative de créer un 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, affaiblissant la garantie un nom, une policy.
*❌ RisquéAutorise tout nom de policy, donc tout script (y compris un script injecté) 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 autorise 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 vérifie pas ce qu'une policy fait, donc une policy default faible qui renvoie son entrée telle quelle redonne un 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 la paire d'abord via un header Report-Only, comme le recommande MDN ; avec les versions actuelles de Chrome, Firefox et Safari qui livrent toutes la prise 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. Câblez la livraison 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. 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

Sources

On this page