Start · Sprachen · JavaScript · Referenz · TrustedTypePolicyFactory.defaultPolicy

TrustedTypePolicyFactory.defaultPolicy

Eigenschaft

Schreibgeschützte Eigenschaft, die die Standard-<code>TrustedTypePolicy</code> namens <code>"default"</code> liefert oder <code>null</code>, wenn keine erstellt wurde.

seit JavaScript Baseline 2025 (Chrome/Edge 83+, Firefox 133+, Safa Kategorie: webapi

Signatur

TrustedTypePolicyFactory.defaultPolicy

Beschreibung

Die Eigenschaft defaultPolicy von TrustedTypePolicyFactory (erreichbar über window.trustedTypes bzw. self.trustedTypes in Workern) gibt die Standard-Richtlinie zurück. Das ist die Richtlinie, die mit trustedTypes.createPolicy("default", …) angelegt wurde. Gibt es keine solche Richtlinie, ist der Wert null.

Die Standard-Richtlinie hat eine Sonderrolle: Wenn die Content Security Policy require-trusted-types-for 'script' aktiv ist und Code einer Injektionssenke wie innerHTML, eval() oder script.src einen einfachen String statt eines Trusted-Type-Objekts übergibt, ruft der Browser automatisch die passende Methode der Standard-Richtlinie auf (createHTML, createScript oder createScriptURL). So lässt sich Altcode oder Code von Drittanbietern absichern, ohne jede Zuweisung einzeln umzubauen.

Mit defaultPolicy prüfen Sie also, ob schon eine Standard-Richtlinie registriert ist. Das hilft, einen doppelten Aufruf von createPolicy("default") zu vermeiden, der je nach CSP einen Fehler auslöst. Die Richtlinie lässt sich außerdem direkt verwenden, um Werte ausdrücklich umzuwandeln.

Rückgabewert

Typ
TrustedTypePolicy | null
Beschreibung
Die Richtlinie mit dem Namen "default" oder null, wenn keine Standard-Richtlinie existiert.

Beispiele

Prüfen, ob eine Standard-Richtlinie existiert

if (window.trustedTypes) {
  console.log(trustedTypes.defaultPolicy); // noch keine angelegt

  trustedTypes.createPolicy('default', {
    createHTML: (input) => input.replace(/</g, '&lt;')
  });

  console.log(trustedTypes.defaultPolicy.name);
}
null default

Standard-Richtlinie nur einmal anlegen (idempotent)

const ensureDefaultPolicy = () => {
  if (!window.trustedTypes) return null; // Browser ohne Unterstützung
  if (trustedTypes.defaultPolicy) return trustedTypes.defaultPolicy;

  return trustedTypes.createPolicy('default', {
    createHTML: (html) => DOMPurify.sanitize(html),
    createScriptURL: (url) => {
      const u = new URL(url, location.href);
      if (u.origin === location.origin) return u.href;
      throw new TypeError(`Unerlaubte Skript-URL: ${u.href}`);
    }
  });
};

const policy = ensureDefaultPolicy();
console.log(policy === ensureDefaultPolicy());
true

Standard-Richtlinie ausdrücklich verwenden

const userInput = '<img src=x onerror=alert(1)>Hallo';
const target = document.querySelector('#ausgabe');

const policy = window.trustedTypes?.defaultPolicy;
if (policy) {
  // Liefert TrustedHTML, die jede CSP-Prüfung besteht
  target.innerHTML = policy.createHTML(userInput);
} else {
  // Fallback: sicher als Text einfügen
  target.textContent = userInput;
}

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an defaultPolicy hat keine Wirkung (im Strict Mode wirft sie einen TypeError). Angelegt wird die Richtlinie nur mit createPolicy("default", …).
  • Nur eine Standard-Richtlinie: Ein zweiter Aufruf von createPolicy("default") wirft einen TypeError, sobald die CSP-Direktive trusted-types gesetzt ist (ohne 'allow-duplicates'). Prüfen Sie deshalb vorher defaultPolicy. Der Name default muss in der CSP-Direktive trusted-types erlaubt sein.
  • Sicherheit: Die Standard-Richtlinie greift bei jeder String-Zuweisung an eine Senke. Eine zu großzügige Richtlinie (z. B. createHTML: s => s) hebelt den XSS-Schutz komplett aus. Bereinigen Sie Eingaben wirklich (z. B. mit DOMPurify) oder geben Sie null/undefined zurück, damit der Browser die Zuweisung blockiert und einen CSP-Verstoß meldet.
  • Frühzeitig anlegen: Die Standard-Richtlinie sollte vor jedem anderen Skript erstellt werden. Sonst könnte ein Angreifer oder eine Bibliothek zuerst eine eigene Richtlinie namens default registrieren.
  • Kompatibilität: Chromium-Browser unterstützen die Eigenschaft seit Version 83. Firefox und Safari sind erst später dazugekommen. Prüfen Sie immer mit window.trustedTypes oder trustedTypes?.defaultPolicy, ob die API vorhanden ist, oder nutzen Sie das offizielle Polyfill.