Document: 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 ruft den Domain-Anteil des Ursprungs des aktuellen Dokuments ab oder setzt ihn, wie er durch die 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-Anteil des Ursprungs des aktuellen Dokuments zurück. In den meisten Fällen wird dies der Hostname-Teil der Dokument-URL sein. Es gibt jedoch einige Ausnahmen:

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

Obwohl der Getter nicht gefährlich ist wie der Setter, ist es wahrscheinlich einfacher und nützlicher, die Location.hostname-Eigenschaft 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 abweichende Informationen liefern, sind Location.host, welches den Port einschließt, und Window.origin, das den vollständigen Ursprung liefert.

Setzen der Domain

js
document.domain = domainString;

Der Setter für diese Eigenschaft kann verwendet werden, um den Ursprung einer Seite zu ändern und dadurch zu modifizieren, wie bestimmte Sicherheitsprü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 aufeinander zugreifen—trotz des normalerweise bestehenden Cross-Origin-Schutzes, der solchen Zugriff verhindern würde.

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

js
document.domain = document.domain;

setzt, dann wird es als Cross-Origin zu allen anderen normalerweise gleichen Ursprungseiten betrachtet, die dies nicht getan haben.

Veralterung

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

Der Versuch, document.domain zu setzen, ist gefährlich. Er ermöglicht vollen Zugriff auf das DOM einer Seite von allen Subdomains, was wahrscheinlich nicht beabsichtigt ist. Er entfernt auch die Port-Komponente aus dem Ursprung, sodass Ihre Seite von anderen Seiten mit derselben IP-Adresse oder demselben Host-Bestandteil, auch bei einem anderen Port, zugänglich ist.

Dies ist besonders unsicher bei gemeinsamem Hosting. Zum Beispiel kann ein anderer Kunde des Hosting-Anbieters eine Seite auf derselben IP-Adresse, aber an einem anderen Port hosten. Das Setzen von document.domain würde dann den Same-Origin-Schutz entfernen, der normalerweise verhindert, dass die Seite des anderen Kunden auf die Daten Ihrer Seite zugreift.

Ähnliche Probleme treten bei gemeinsamen 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.

Statt document.domain zu verwenden, um eine Cross-Origin-Kommunikation zu erleichtern, sollten Sie Window.postMessage verwenden, um eine asynchrone Nachricht an den anderen Ursprung zu senden. Dieser kontrollierte Zugang über Nachrichtenübermittlung ist viel sicherer als die pauschale Datenfreigabe, die document.domain verursacht.

Fehler

Der Setter wird in mehreren Fällen einen SecurityError DOMException auslösen:

Ein Beispiel für diesen letzten Fehlerfall ist der Versuch, document.domain auf "example.org" zu setzen, wenn man sich auf https://example.com/ befindet.

Zusätzlich wird es, als Teil seiner Veralterung, 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 Sub-Domain-Zugriffe über diesen Mechanismus verhindert werden. Betroffene APIs umfassen (aber sind nicht beschränkt auf): 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