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.
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:
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
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
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
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:
- Die
document-domain
Permissions-Policy
ist deaktiviert. - Das Dokument befindet sich in einem sandboxed
<iframe>
. - Das Dokument hat keinen Browsing-Kontext.
- Die effektive Domain des Dokuments ist
null
. - Der gegebene Wert ist weder derselbe wie der aktuelle Hostname der Seite noch eine übergeordnete Domain davon.
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:
- Wenn es auf einer Cross-Origin-isolierten Seite verwendet wird, d.h. einer, die die geeigneten Werte für die
Cross-Origin-Opener-Policy
undCross-Origin-Embedder-Policy
HTTP-Header verwendet - Wenn es auf einer Ursprung-isolierten Seite verwendet wird, d.h. einer, die den
Origin-Isolation
HTTP-Header verwendet
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