CentralCSP
PolitiquesContent-Security-PolicyDirectives

require-trusted-types-for

La directive CSP require-trusted-types-for impose Trusted Types aux sinks de DOM XSS et bloque les affectations de chaînes brutes aux API dangereuses.

Dernière mise à jour:

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.

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.

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, 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 :

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

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

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

ValeurStatutDescription
'script'✅ BonExige 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 :

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

Exemples

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

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

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

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. 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

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

Une affectation de sink que la directive bloque (ou bloquerait en mode report-only) émet un rapport csp-violation nommant require-trusted-types-for 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