Start · Sprachen · JavaScript · Referenz · TrustedTypePolicy.createScript()

TrustedTypePolicy.createScript()

Methode

Erzeugt über die <code>createScript</code>-Regel einer Richtlinie ein <code>TrustedScript</code>-Objekt, das in Skript-Senken wie <code>eval()</code> oder <code>script.textContent</code> erlaubt ist.

seit JavaScript Chrome/Edge 83+, Firefox 145+, Safari 26+ (Trusted Kategorie: webapi

Signatur

TrustedTypePolicy.prototype.createScript(input, ...args)

Beschreibung

createScript() gibt eine Zeichenkette an die Funktion createScript weiter, die beim Anlegen der Richtlinie mit trustedTypes.createPolicy() festgelegt wurde. Diese Funktion prüft den Eingabewert, bereinigt ihn oder lehnt ihn ab. Aus ihrem Rückgabewert wird ein TrustedScript-Objekt gebaut, das der Browser als geprüften JavaScript-Code ansieht.

Gebraucht wird das, sobald eine Content Security Policy mit require-trusted-types-for 'script' aktiv ist. Dann nehmen Skript-Senken wie eval(), new Function(), setTimeout(string), HTMLScriptElement.text, textContent und innerText von <script>-Elementen keine einfachen Zeichenketten mehr an, sondern nur noch TrustedScript-Objekte. Andernfalls wirft der Browser einen TypeError.

Weitere Argumente nach input gibt der Browser unverändert an die Regelfunktion weiter. So lässt sich zum Beispiel Kontext übergeben. Hat die Richtlinie keine createScript-Regel, wirft der Aufruf einen TypeError. Gibt die Regel null oder undefined zurück, entsteht ein TrustedScript mit leerer Zeichenkette.

Parameter

Name Typ Default Beschreibung
$input Pflicht string Der JavaScript-Quelltext, den die Regelfunktion der Richtlinie prüfen bzw. bereinigen soll.
$...args any Weitere Argumente, die unverändert an die createScript-Regelfunktion weitergegeben werden.

Rückgabewert

Typ
TrustedScript
Beschreibung
Ein TrustedScript-Objekt mit dem von der Regelfunktion zurückgegebenen Code. Seine Zeichenkettenform liefern toString() und toJSON().

Beispiele

Richtlinie anlegen und TrustedScript erzeugen

// CSP: require-trusted-types-for 'script'; trusted-types script-policy
const policy = trustedTypes.createPolicy('script-policy', {
  createScript: (input) => {
    // Nur einfache Konfigurationszuweisungen zulassen
    if (!/^window\.appConfig = \{[^<>]*\};$/.test(input)) {
      throw new TypeError('Unerlaubtes Skript abgelehnt');
    }
    return input;
  }
});

const trusted = policy.createScript('window.appConfig = {"theme":"dark"};');
console.log(trusted instanceof TrustedScript);
console.log(trusted.toString());
true window.appConfig = {"theme":"dark"};

Inline-Skript dynamisch einfügen

const policy = trustedTypes.createPolicy('inline-loader', {
  createScript: (code) => code.trim()
});

const script = document.createElement('script');
// Ohne TrustedScript würde das unter erzwungenen Trusted Types einen TypeError werfen
script.textContent = policy.createScript('  console.log("Skript geladen");  ');
document.head.append(script);
Skript geladen

Zusätzliche Argumente und Fehlerbehandlung

const policy = trustedTypes.createPolicy('eval-policy', {
  createScript: (code, source) => {
    if (source !== 'intern') {
      throw new TypeError(`Quelle "${source}" nicht vertrauenswürdig`);
    }
    return code;
  }
});

try {
  const ok = policy.createScript('2 + 3', 'intern');
  console.log(eval(ok));
  policy.createScript('alert(1)', 'benutzer');
} catch (err) {
  console.error(err.message);
}
5 Quelle "benutzer" nicht vertrauenswürdig

Feature-Erkennung mit Rückfall

const scriptPolicy = window.trustedTypes?.createPolicy
  ? trustedTypes.createPolicy('fallback-safe', { createScript: (s) => s })
  : { createScript: (s) => s }; // Browser ohne Trusted Types

const el = document.createElement('script');
el.textContent = scriptPolicy.createScript('console.log("läuft überall")');
document.body.append(el);
läuft überall

// Wichtig · Fallstricke

  • Sicherheit: Eine Regel wie (s) => s gibt die Eingabe ungeprüft weiter und hebelt den Schutz vor XSS komplett aus. Solche Richtlinien nur für Code verwenden, der garantiert nicht von Nutzern oder Dritten stammt. Das Erzeugen sollte an wenigen Stellen gebündelt sein, damit es sich prüfen lässt.
  • Code zu bereinigen ist praktisch unmöglich. Besser ist es, nur eine feste Liste erlaubter Codes zuzulassen oder auf eval-artige Senken ganz zu verzichten.
  • Damit eval() und new Function() ein TrustedScript annehmen, muss die CSP zusätzlich 'unsafe-eval' oder 'trusted-types-eval' in script-src erlauben.
  • Für die URL in script.src ist createScriptURL() zuständig, nicht createScript().
  • Ohne passende createScript-Regel wirft der Aufruf einen TypeError. Richtliniennamen müssen in der CSP-Direktive trusted-types erlaubt sein.
  • Kompatibilität: Chromium-Browser unterstützen die API seit Version 83. Firefox und Safari erst seit Kurzem (Firefox 145, Safari 26). Für ältere Browser gibt es ein Polyfill oder eine Feature-Erkennung über window.trustedTypes.