Dokument: domain-Eigenschaft

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, könnte sie bereits aus den relevanten Webstandards entfernt worden sein, in Kürze entfernt werden oder nur noch aus Kompatibilitätsgründen bestehen. Vermeiden Sie die Verwendung und aktualisieren Sie vorhandenen Code, falls möglich; siehe die Kompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu unterstützen. Beachten Sie, dass diese Funktion jederzeit aufhören könnte zu funktionieren.

Die domain-Eigenschaft des Document-Interfaces holt/setzt den Domain-Teil des Ursprungs des aktuellen Dokuments, wie er von der Same-Origin-Policy verwendet wird.

Wert

Ein String.

Ausnahmen

SecurityError DOMException

Die Nutzung dieser Funktion wurde durch eine Berechtigungsrichtlinie blockiert.

Beispiele

Abrufen der Domain

Für Code, der unter der URL https://developer.mozilla.org/de/docs/Web ausgeführt wird, würde dieses Beispiel currentDomain auf den String "developer.mozilla.org" setzen.

js
const currentDomain = document.domain;

Der Getter für diese Eigenschaft gibt den Domain-Teil des Ursprungs des aktuellen Dokuments zurück. In den meisten Fällen wird dies der Hostname-Teil der URL des Dokuments sein. Es gibt jedoch einige Ausnahmen:

  • Wenn die Seite einen undurchsichtigen Ursprung hat, z. B. für eine Seite mit einer Data-URL, dann wird ein leerer String zurückgegeben.
  • Wenn der document.domain-Setter verwendet wurde, dann wird der Wert, der gesetzt wurde, zurückgegeben.

Obwohl der Getter nicht auf die gleiche Weise gefährlich ist wie der Setter, ist es wahrscheinlich einfacher und nützlicher, die [Location.hostname]-Eigenschaft(/de/docs/Web/API/Location/hostname) zu verwenden. So können Sie document.domain vollständig vermeiden:

js
const currentHostname = location.hostname;

Für die URL https://developer.mozilla.org/de/docs/Web ist currentHostname ebenfalls der String "developer.mozilla.org". Andere Alternativen, die leicht unterschiedliche Informationen bieten, sind Location.host, das den Port einschließt, und Window.origin, das den vollständigen Ursprung bereitstellt.

Setzen der Domain

js
document.domain = domainString;

Der Setter für diese Eigenschaft kann verwendet werden, um den Ursprung einer Seite zu ändern und somit zu beeinflussen, wie bestimmte Sicherheitsüberprüfungen durchgeführt werden. Er kann nur auf die gleiche oder eine übergeordnete Domain gesetzt werden. Zum Beispiel, wenn https://a.example.com und https://b.example.com beide verwenden

js
document.domain = "example.com";

dann haben sie beide ihren Ursprung so verändert, dass sie dieselbe Domain haben, und sie können nun direkt auf das DOM des anderen zugreifen — trotz originübergreifend, was normalerweise einen solchen Zugriff verhindern würde.

Beachten Sie, dass das Setzen von document.domain auf seinen aktuellen Wert kein No-Op ist. Es ändert dennoch den Ursprung. Zum Beispiel, wenn eine Seite setzt

js
document.domain = document.domain;

dann wird sie als originübergreifend von jeder anderen normalerweise gleichbürtigen Seitenseiten betrachtet, die nicht dasselbe getan haben.

Veralterung

Der document.domain-Setter ist veraltet. Er untergräbt die Sicherheitsmaßnahmen, die durch die Same-Origin-Policy bereitgestellt werden, und verkompliziert das Ursprungsmodell in Browsern, was zu Interoperabilitätsproblemen und Sicherheitslücken führt.

Das Setzen von document.domain ist gefährlich. Es öffnet den vollen Zugriff auf das DOM einer Seite von allen Subdomains, was wahrscheinlich nicht beabsichtigt ist. Es entfernt auch die Portkomponente vom Ursprung, sodass Ihre Seite nun von anderen Seiten mit derselben IP-Adresse oder derselben Hostkomponente, selbst an einem anderen Port, darauf zugegriffen werden kann.

Dies ist besonders unsicher bei gemeinsam genutztem Hosting. Wenn zum Beispiel ein anderer Kunde des gemeinsamen Hostings in der Lage ist, eine Seite mit derselben IP-Adresse, aber an einem anderen Port zu hosten, dann entfernt das Setzen von document.domain den gleichbürtigen Schutz, der Sie normalerweise vor dem Zugriff der anderen Kundenseite auf die Daten Ihrer Seite bewahrt.

Ähnliche Probleme treten bei gemeinsam genutzten Hosting-Seiten auf, die jedem Kunden eine andere Subdomain zuweisen. Wenn eine Seite document.domain setzt, kann jeder andere Kunde auf einer anderen Subdomain dasselbe tun und beginnen, auf die Daten der ursprünglichen Seite zuzugreifen.

Anstatt document.domain zu verwenden, um die kommunikation über Ursprünge hinweg zu erleichtern, sollten Sie Window.postMessage verwenden, um eine asynchrone Nachricht an den anderen Ursprung zu senden. Dieser kontrollierte Zugriff durch Nachrichtenübermittlung ist viel sicherer als die vollständige Freigabe aller Daten durch document.domain.

Fehler

Der Setter wirft in mehreren Fällen einen SecurityError DOMException:

Als Beispiel für diesen letzten Fehlfall wird ein Versuch, document.domain auf "example.org" zu setzen, wenn man sich auf https://example.com/ befindet, einen Fehler werfen.

Zusätzlich wird es als Teil seiner Deprecation nichts tun, wenn es mit bestimmten modernen Isolationsfunktionen kombiniert wird:

Schließlich ändert das Setzen von document.domain nicht den Ursprung, der für Ursprungsüberprüfungen durch einige Web-APIs verwendet wird, wodurch der Sub-Domain-Zugriff über diesen Mechanismus verhindert wird. Betroffene APIs umfassen (aber sind nicht darauf beschränkt): Window.localStorage, IndexDB API, BroadcastChannel, SharedWorker.

Spezifikationen

Specification
HTML Standard
# relaxing-the-same-origin-restriction

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch