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.
| 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 :
Content-Security-Policy:
require-trusted-types-for 'script';
trusted-types default dompurifyExemples
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-endpointNotes 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 dompurifyDé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
- Directive trusted-types
- Mots-clés et valeurs CSP
- Comment activer Trusted Types
- Trusted Types et eval en CSP
Sources
block-all-mixed-content
La directive CSP obsolète block-all-mixed-content bloque toute sous-ressource HTTP sur une page HTTPS. Utilisez plutôt upgrade-insecure-requests.
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.