Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

WorkerGlobalScope: importScripts() Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.

Hinweis: Diese Funktion ist nur in Web Workers verfügbar.

Warnung: Die an diese Methode übergebenen Parameter stellen die URLs von klassischen Skripten dar, die in einen Worker importiert werden sollen. Solche APIs sind als Injection Sinks bekannt und stellen potenziell einen Vektor für Cross-Site Scripting (XSS)-Angriffe dar.

Sie können dieses Risiko mindern, indem Sie eine Content Security Policy (CSP) haben, die die Orte einschränkt, von denen Skripte geladen werden können, und indem Sie immer TrustedScriptURL-Objekte anstelle von Strings zuweisen und vertrauenswürdige Typen durchsetzen. Siehe Sicherheitsüberlegungen für weitere Informationen.

Die importScripts() Methode des WorkerGlobalScope-Interfaces importiert synchron ein oder mehrere Skripte in den Geltungsbereich eines klassischen Workers (einen Worker, der aus einem klassischen Skript erstellt wurde).

Beachten Sie, dass die Methode nicht in Modul-Workern verwendet werden kann, die stattdessen Abhängigkeiten mittels import Anweisungen laden.

Syntax

js
importScripts(url0)
importScripts(url0, url1)
importScripts(url0, url1, /* …, */ urlN)

Parameter

urlN

Eine Instanz von TrustedScriptURL oder ein String, der die URL des zu importierenden Skripts darstellt. Die URL kann absolut oder relativ sein. Ist sie relativ, bezieht sie sich auf die URL des Startskripts des Workers.

Rückgabewert

Keiner (undefined).

Ausnahmen

NetworkError

Importierte Skripte wurden ohne text/javascript Medien (MIME)-Typ oder ohne einen der erlaubten veralteten JavaScript MIME-Typen bereitgestellt.

SyntaxError

Wird ausgelöst, wenn eine URL nicht aufgelöst werden kann.

TypeError

Wird ausgelöst, wenn der aktuelle WorkerGlobalScope ein Modul ist (verwenden Sie stattdessen import). Es kann auch passieren, wenn ein Parameter kein TrustedScriptURL ist und die Seite vertrauenswürdige Typen durchsetzt.

Beschreibung

Die importScripts() Methode importiert synchron ein oder mehrere Skripte in den Geltungsbereich eines klassischen Workers.

Im Gegensatz zu dem initialen klassischen Modulskript, das mit seinem Dokument gleichen Ursprungs sein muss, kann diese Methode plattformübergreifende Skripte importieren, es sei denn, es wird durch eine Cross-Origin-Resource-Policy, Content Security Policy (CSP) oder einen anderen Sicherheitsmechanismus blockiert. Beachten Sie, dass klassische Skripte im no-cors-Modus abgerufen werden, sie können daher plattformübergreifend abgerufen werden, selbst wenn der Server nicht die passenden CORS-Header setzt.

Sicherheitsüberlegungen

Die Parameter geben die Skripte an, die in den Geltungsbereich eines klassischen Workers importiert werden sollen. Wenn die URLs der Skripte von einem Benutzer bereitgestellt werden, ist dies ein potenzieller Vektor für Cross-Site Scripting (XSS)-Angriffe.

Es ist äußerst riskant, willkürliche URLs von nicht vertrauenswürdigen Ursprüngen zu akzeptieren und auszuführen. Eine Website sollte kontrollieren, welche Skripte ausgeführt werden dürfen, indem sie eine Content Security Policy (CSP) mit der script-src-Direktive verwendet (oder einen Fallback definiert in default-src). Dies kann Skripte auf die aktuelle Herkunft, eine spezifische Menge an Ursprüngen oder sogar bestimmte Dateien beschränken.

Wenn Sie diese Eigenschaft verwenden und vertrauenswürdige Typen durchsetzen (unter Verwendung der require-trusted-types-for CSP-Direktive), müssen Sie immer TrustedScriptURL-Objekte anstelle von Strings zuweisen. Dies stellt sicher, dass der Eingabewert durch eine Transformationsfunktion übergeben wird, die die Möglichkeit hat, die URL abzulehnen oder zu verändern, bevor sie injiziert wird.

Beispiele

Grundlegende Nutzung

Wenn Sie eine Funktionalität haben, die in einem separaten Skript namens foo.js im selben Verzeichnis wie worker.js geschrieben ist, könnten Sie es mit der folgenden Zeile in den Worker importieren:

js
importScripts("foo.js");

importScripts() und self.importScripts() sind effektiv gleichwertig — beide repräsentieren importScripts(), aufgerufen aus dem inneren Geltungsbereich des Workers.

Beachten Sie, dass wir Ihnen im nächsten Abschnitt zeigen, wie man einen TrustedScriptURL anstelle eines Strings übergibt. Dies wurde in diesem Beispiel der Kürze halber weggelassen, wird jedoch im Produktionscode empfohlen.

Verwendung von TrustedScriptURL

Um das Risiko von XSS zu mildern, sollten wir immer TrustedScriptURL Instanzen für jeden der Parameter zuweisen. Wir müssen dies auch tun, wenn wir vertrauenswürdige Typen aus anderen Gründen durchsetzen und wir einige zugelassene Skriptquellen zulassen wollen (zum Beispiel durch CSP: script-src).

Vertrauenswürdige Typen werden noch nicht in allen Browsern unterstützt, daher definieren wir zunächst das trusted types tinyfill. Dies fungiert als transparenter Ersatz für die vertrauenswürdigen Typen der JavaScript-API:

js
if (typeof trustedTypes === "undefined")
  trustedTypes = { createPolicy: (n, rules) => rules };

Als nächstes erstellen wir eine TrustedTypePolicy, die eine createScriptURL() Methode definiert, um Eingabestrings in TrustedScriptURL Instanzen zu transformieren.

Für das Beispiel nehmen wir an, dass wir eine vordefinierte Menge von URLs im scriptAllowList Array erlauben und alle anderen Skripte protokollieren wollen.

js
const scriptAllowList = [
  // Some list of allowed URLs
];
const policy = trustedTypes.createPolicy("script-url-policy", {
  createScriptURL(input) {
    if (scriptAllowList.includes(input)) {
      return input; // allow the script
    }
    console.log(`Script not in scriptAllowList: ${input}`);
    return ""; // Block the script
  },
});

Dann verwenden wir das policy Objekt, um ein TrustedScript Objekt von einem potenziell unsicheren Eingabestring zu erstellen:

js
// The potentially malicious string
// We won't be including untrustedScript in our scriptAllowList array
const untrustedScript = "https://evil.example.com/import_worker.js";

// Create a TrustedScriptURL instance using the policy
const trustedScriptURL = policy.createScriptURL(untrustedScript);

Das TrustedScriptURL Objekt kann nun beim Importieren des Skripts in einem klassischen Worker verwendet werden:

js
importScripts(trustedScriptURL);

Spezifikationen

Specification
HTML
# dom-workerglobalscope-importscripts-dev

Browser-Kompatibilität

Siehe auch