Signatur
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
"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, '<')
});
console.log(trustedTypes.defaultPolicy.name);
}
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());
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
defaultPolicyhat keine Wirkung (im Strict Mode wirft sie einenTypeError). Angelegt wird die Richtlinie nur mitcreatePolicy("default", …). - Nur eine Standard-Richtlinie: Ein zweiter Aufruf von
createPolicy("default")wirft einenTypeError, sobald die CSP-Direktivetrusted-typesgesetzt ist (ohne'allow-duplicates'). Prüfen Sie deshalb vorherdefaultPolicy. Der Namedefaultmuss in der CSP-Direktivetrusted-typeserlaubt 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 Sienull/undefinedzurü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
defaultregistrieren. - 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.trustedTypesodertrustedTypes?.defaultPolicy, ob die API vorhanden ist, oder nutzen Sie das offizielle Polyfill.