Wenn auf Ihrer Website „document.domain“ festgelegt wird, müssen Sie aktiv werden.
| Alternativer Code
Was ändert sich und warum?
Ab Chrome 115 kann für Websites document.domain nicht festgelegt werden. Chrome macht document.domain unveränderlich. Für die ursprungsübergreifende Kommunikation müssen Sie alternative Ansätze wie postMessage() oder die Channel Messaging API verwenden.
Diese Änderung wird nach und nach eingeführt.
Wir gehen davon aus, dass andere Browser diese Funktion ebenfalls einstellen und entfernen werden. Weitere Informationen finden Sie im Abschnitt Browserkompatibilität.
Warum ist document.domain unveränderlich?
document.domain wurde entwickelt, um den Hostnamen des Ursprungs abzurufen oder festzulegen. Viele Websites legen document.domain fest, um die Kommunikation zwischen Seiten mit demselben Standort, aber unterschiedlichen Ursprüngen zu ermöglichen.
Das ist zwar praktisch, birgt aber ein Sicherheitsrisiko, da die Same-Origin-Richtlinie gelockert wird.
Sicherheitsbedenken in Bezug auf document.domain haben zu einer Änderung der Spezifikation geführt, in der Nutzer davor gewarnt werden, sie zu verwenden.
Im Detail: Warum sollte document.domain unveränderlich sein?
Aktuelle Verwendung von document.domain
Viele Websites legen document.domain fest, um die Kommunikation zwischen Seiten mit demselben Ursprung, aber unterschiedlichen Websites zu ermöglichen.
Websites, die Same-Site, aber Cross-Origin sind, haben dieselbe eTLD+1, aber unterschiedliche Subdomains.
So wurde document.domain bisher genutzt:
Angenommen, auf einer Seite unter https://parent.example.com wird eine iFrame-Seite von https://video.example.com eingebettet. Diese Seiten haben dieselbe eTLD+1 (example.com), aber unterschiedliche Subdomains. Wenn document.domain beider Seiten auf 'example.com' festgelegt ist, behandelt der Browser die beiden Ursprünge so, als wären sie vom selben Ursprung.
Legen Sie document.domain für https://parent.example.com fest:
// Confirm the current origin of "parent.example.com"
console.log(document.domain);
// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);
Legen Sie document.domain für https://video.example.com fest:
// Confirm the current origin of "video.example.com"
console.log(document.domain);
// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);
Sie könnten jetzt eine DOM-Manipulation über verschiedene Ursprünge hinweg auf https://parent.example.com gegen https://video.example.com erstellen.
Websites legen document.domain fest, damit Dokumente derselben Website einfacher kommunizieren können. Da diese Änderung die Richtlinie für denselben Ursprung lockert, kann die übergeordnete Seite auf das Dokument des iFrames zugreifen und den DOM-Baum durchlaufen und umgekehrt.
Das ist zwar praktisch, birgt aber ein Sicherheitsrisiko.
Sicherheitsbedenken bei document.domain
Sicherheitsbedenken in Bezug auf document.domain haben zu einer Änderung der Spezifikation geführt, in der Nutzer davor gewarnt werden, sie zu verwenden.
Wenn beispielsweise auf zwei Seiten document.domain festgelegt ist, können sie so tun, als ob sie denselben Ursprung hätten. Das ist besonders wichtig, wenn diese Seiten einen gemeinsamen Hostingdienst mit verschiedenen Subdomains verwenden. Wenn Sie document.domain festlegen, wird der Zugriff auf alle anderen Websites, die von demselben Dienst gehostet werden, geöffnet. Dadurch können Angreifer leichter auf Ihre Websites zugreifen. Das ist möglich, weil bei document.domain der Portnummernteil der Domain ignoriert wird.
Weitere Informationen zu den Auswirkungen auf die Sicherheit, wenn Sie document.domain festlegen, finden Sie auf der MDN-Seite zu „Document.domain“.
Browserkompatibilität
- Die HTML-Spezifikation besagt, dass das Attribut entfernt werden sollte.
- Mozilla erwägt,
document.domainstandardmäßig zu deaktivieren. - WebKit hat angedeutet, dass sie die Einstellung des
document.domain-Setters für wahrscheinlich halten. - Austausch mit anderen Browseranbietern
- Pull-Anfrage der WHATWG / HTML Working Group (abhängig von der Testerfahrung)
Woher weiß ich, ob meine Website betroffen ist?
Wenn Ihre Website von dieser Änderung betroffen ist, werden Sie in Chrome im Bereich „Probleme“ der Entwicklertools gewarnt. Diese Warnung wurde 2022 hinzugefügt. Achten Sie auf das gelbe Flagge-Symbol oben rechts in den Entwicklertools.

Sie können Ihre Website auch über das Lighthouse-Audit für eingestellte APIs ausführen, um alle APIs zu finden, die aus Chrome entfernt werden sollen.
Wenn Sie die Reporting API eingerichtet haben, hat Chrome Ihnen Einstellungsberichte gesendet, um Sie über die bevorstehende Einstellung zu informieren. Weitere Informationen zur Verwendung der Reporting API mit vorhandenen Diensten zum Erstellen von Berichten oder zum Erstellen einer eigenen internen Lösung
Wie kann ich diese Änderung in der Praxis sehen?
Die Änderung wird schrittweise eingeführt, beginnend mit Chrome 115. So können Sie sich die Änderung ansehen, auch wenn sie in Ihrem Chrome-Browser noch nicht eingeführt wurde:
chrome://flags/#origin-agent-cluster-defaultöffnen- Wählen Sie Aktivieren aus.
- Starten Sie Chrome neu.
Welche Alternativen kann ich verwenden?
Am besten ist es, document.domain überhaupt nicht zu ändern, z. B. indem Sie die Seite und alle zugehörigen Frames auf demselben Ursprung hosten. Das funktioniert in allen Versionen aller Browser. Dies kann jedoch eine erhebliche Überarbeitung einer Anwendung erfordern. Daher lohnt es sich, auch nach Alternativen zu suchen, die weiterhin den Zugriff über verschiedene Ursprünge hinweg unterstützen.
postMessage() oder Channel Messaging API anstelle von document.domain verwenden
In den meisten Anwendungsfällen können postMessage()
oder die Channel Messaging API document.domain ersetzen.
Im folgenden Beispiel gilt:
https://parent.example.comforderthttps://video.example.comin einem iFrame an, um das DOM zu bearbeiten. Dazu wird eine Nachricht überpostMessage()gesendet.https://video.example.commanipuliert das DOM, sobald es die Nachricht empfängt, und benachrichtigt das übergeordnete Element über den Erfolg.https://parent.example.comerkennt den Erfolg an.
Am https://parent.example.com:
// Send a message to https://video.example.com
iframe.postMessage('Request DOM manipulation', 'https://video.example.com');
// Receive messages
iframe.addEventListener('message', (event) => {
// Reject all messages except ones from https://video.example.com
if (event.origin !== 'https://video.example.com') return;
// Filter success messages
if (event.data === 'succeeded') {
// DOM manipulation is succeeded
}
});
Am https://video.example.com:
// Receive messages
window.addEventListener('message', (event) => {
// Reject all messages except ones from https://parent.example.com
if (event.origin !== 'https://parent.example.com') return;
// Do a DOM manipulation on https://video.example.com.
// Send a success message to https://parent.example.com
event.source.postMessage('succeeded', event.origin);
});
Probieren Sie es aus. Wenn Sie spezielle Anforderungen haben, die nicht mit postMessage() oder der Channel Messaging API funktionieren, teilen Sie uns dies bitte auf Twitter über @ChromiumDev mit oder stellen Sie eine Frage auf Stack Overflow mit dem Tag document.domain.
Als letzte Option können Sie den Origin-Agent-Cluster: ?0-Header senden.
Wenn Sie gute Gründe haben, document.domain weiterhin festzulegen, können Sie den Antwortheader Origin-Agent-Cluster: ?0 zusammen mit dem Zieldokument senden.
Origin-Agent-Cluster: ?0
Der Origin-Agent-Cluster-Header weist den Browser an, ob das Dokument vom an Ursprünge gebundenen Agent-Cluster verarbeitet werden soll oder nicht. Weitere Informationen zu Origin-Agent-Cluster finden Sie unter Leistungsisolierung mit dem Origin-Agent-Cluster-Header anfordern.
Wenn Sie diesen Header senden, kann in Ihrem Dokument weiterhin document.domain festgelegt werden, auch nachdem es standardmäßig unveränderlich geworden ist.
Alle anderen Dokumente, die dieses Verhalten erfordern, müssen ebenfalls ein Origin-Agent-Cluster senden. Beachten Sie, dass document.domain keine Auswirkungen hat, wenn es nur von einem Dokument festgelegt wird.
OriginAgentClusterDefaultEnabled für Unternehmensrichtlinie konfigurieren
Optional kann Ihr Administrator die OriginAgentClusterDefaultEnabled-Richtlinie auf false festlegen, damit document.domain standardmäßig für Chrome-Instanzen in Ihrer Organisation festgelegt werden kann. Weitere Informationen
Ressourcen
Document.domain– Web APIs | MDN- Ursprungsisolation und Einstellung von
document.domain - Einstellung von
document.domain. · Problem 564 · w3ctag/design-reviews
Danksagungen
Foto von Finan Akbar auf Unsplash