Trusted Types

Advanced Ecosystem 🔴 Senior

Définition

API navigateur, pilotée par CSP (require-trusted-types-for 'script'), qui interdit de passer une chaîne brute aux puits d'injection du DOM (innerHTML, eval, script.src…) : seuls des objets TrustedHTML/TrustedScript créés par une politique déclarée sont acceptés, sinon TypeError. C'est la défense la plus efficace contre le XSS basé sur le DOM. Disponible dans Chrome et Edge depuis la version 83 (2020), Safari 26 (septembre 2025) et Firefox 148 (février 2026) : statut Baseline depuis février 2026.

Analogie

Un vigile qui n'accepte à l'entrée que des invitations tamponnées par le bureau d'accueil : plus personne ne rentre avec un papier écrit à la main.

Exemple de code

// En-tête CSP côté serveur :
// Content-Security-Policy: require-trusted-types-for 'script'; trusted-types app

// Une seule politique, un seul endroit où l'on assainit
const policy = trustedTypes.createPolicy('app', {
  createHTML: (input) => DOMPurify.sanitize(input),
  createScriptURL: (url) => {
    if (new URL(url, location.href).origin !== location.origin) throw new Error('URL refusée');
    return url;
  },
});

el.innerHTML = policy.createHTML(userInput); // OK : TrustedHTML
el.innerHTML = userInput;                    // TypeError : bloqué par CSP

Cas d'usage

Applications à forte surface DOM (éditeurs, dashboards, CMS) où un XSS DOM aurait un impact fort ; à déployer d'abord en mode Report-Only.

Anti-pattern

Créer une politique « default » qui renvoie l'entrée telle quelle pour faire taire les erreurs : on garde la contrainte sans la protection.
#security#xss#web

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre