Wenn für Ihre Website die Einstellung „document.domain“ erforderlich ist, müssen Sie etwas unternehmen.
Was ändert sich und warum?
Ab Chrome 115 kann „document.domain
“ für Websites nicht mehr festgelegt werden: document.domain
wird in Chrome unveränderlich gemacht. Um ursprungsübergreifend zu kommunizieren, 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 irgendwann einstellen und entfernen werden. Weitere Informationen finden Sie im Abschnitt Browserkompatibilität.
Warum sollte document.domain
unveränderlich gemacht werden?
document.domain
wurde entwickelt, um den Hostnamen des Ursprungs abzurufen oder festzulegen. Viele Websites legen document.domain
so fest, dass die Kommunikation zwischen Seiten mit gleicher Website, aber ursprungsübergreifend ermöglicht wird.
Diese Methode ist zwar bequem, birgt aber ein Sicherheitsrisiko, da die Same-Origin-Richtlinie lockert.
Sicherheitsbedenken im Zusammenhang mit document.domain
haben zu einer Änderung der Spezifikation geführt, durch die Nutzer vor der Verwendung der Spezifikation gewarnt werden.
Ausführlich: Warum sollte „document.domain“ unveränderlich gemacht werden?
So wird document.domain
heute verwendet
Viele Websites legen document.domain
so fest, dass die Kommunikation zwischen Seiten mit gleicher Website, aber ursprungsübergreifend erlaubt wird.
Identische Websites, aber ursprungsübergreifende Websites haben dieselbe eTLD+1, aber unterschiedliche Subdomains.
So wurde „document.domain
“ bisher verwendet:
Angenommen, eine Seite unter https://parent.example.com
bettet eine iFrame-Seite aus https://video.example.com
ein. Diese Seiten haben dieselbe eTLD+1 (example.com
) mit unterschiedlichen Subdomains. Wenn das document.domain
beider Seiten auf 'example.com'
gesetzt ist, behandelt der Browser die beiden Ursprünge so, als hätten sie denselben 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önnen jetzt eine ursprungsübergreifende DOM-Manipulation für https://parent.example.com
für https://video.example.com
erstellen.
Websites legen document.domain
fest, um die Kommunikation von Dokumenten auf derselben Website zu vereinfachen. Da durch diese Änderung die Richtlinie für denselben Ursprung gelockert wird, kann die übergeordnete Seite auf das Dokument des iFrame zugreifen und die DOM-Baumstruktur durchqueren und umgekehrt.
Diese Methode ist praktisch, birgt aber auch ein Sicherheitsrisiko.
Sicherheitsbedenken bei document.domain
Sicherheitsbedenken im Zusammenhang mit document.domain
haben zu einer Änderung der Spezifikation geführt, die Nutzer vor der Verwendung der Spezifikation gewarnt.
Wenn beispielsweise für zwei Seiten document.domain
festgelegt ist, können sie so aussehen, als hätten sie denselben Ursprung. Dies ist besonders wichtig, wenn für diese Seiten ein gemeinsamer Hostingdienst mit verschiedenen Subdomains verwendet wird. Wenn Sie document.domain
festlegen, erhalten Angreifer Zugriff auf alle anderen Websites, die von demselben Dienst gehostet werden. Dadurch können Angreifer einfacher auf Ihre Websites zugreifen. Das ist möglich, weil document.domain
den Portnummernteil der Domain ignoriert.
Weitere Informationen zu den Auswirkungen der Einstellung von document.domain
auf die Sicherheit finden Sie auf der MDN-Seite „Document.domain“.
Browserkompatibilität
- Die HTML-Spezifikation besagt, dass das Element entfernt werden sollte.
- Bei Mozilla ist es sinnvoll,
document.domain
standardmäßig zu deaktivieren. - WebKit gab an, dass sie der Einstellung des Setter von
document.domain
mäßig positiv gegenüberstehen. - Diskussion mit anderen Browseranbietern
- whatWG / HTML-Arbeitsgruppe Pull-Anfrage (ausstehende Testerfahrung)
Woher weiß ich, ob meine Website betroffen ist?
Wenn deine Website von dieser Änderung betroffen ist, wirst du von Chrome im Bereich „Probleme mit Entwicklertools“ gewarnt – diese Warnung wurde 2022 hinzugefügt. In den Entwicklertools oben rechts siehst du eine gelbe Markierung.
Sie können für Ihre Website auch die Prüfung der eingestellten LightHouse API durchführen, um alle APIs zu finden, die demnächst aus Chrome entfernt werden.
Wenn Sie die Reporting API eingerichtet haben, erhalten Sie von Chrome Einstellungsberichte, um Sie über die anstehende Einstellung zu informieren. Weitere Informationen zur Verwendung der Reporting API mit vorhandenen Diensten zur Berichtserfassung oder zum Erstellen einer eigenen Lösung.
Wie kann ich diese Änderung in Aktion sehen?
Die Änderung wird ab Chrome 115 nach und nach eingeführt. Wenn Sie diese Änderung in Aktion sehen möchten, auch wenn sie in Ihrem Chrome-Browser noch nicht eingeführt wurde, können Sie sie so aktivieren:
chrome://flags/#origin-agent-cluster-default
öffnen- Wähle Aktivieren aus.
- Starten Sie Chrome neu.
Welche Alternativen kann ich verwenden?
Die beste Option besteht darin, document.domain
überhaupt nicht zu ändern, z. B. indem die Seite und alle zugehörigen Frames am selben Ursprung gehostet werden. Das funktioniert in allen Versionen
aller Browser. Dies kann jedoch eine umfangreiche Überarbeitung der Anwendung erfordern. Daher lohnt es sich, auch nach Alternativen zu suchen, die weiterhin ursprungsübergreifende Zugriffe unterstützen.
postMessage()
oder Channel Messaging API statt document.domain
verwenden
In den meisten Anwendungsfällen kann document.domain
durch ursprungsübergreifendes postMessage()
oder die Channel Messaging API ersetzt werden.
Im folgenden Beispiel gilt:
https://parent.example.com
forderthttps://video.example.com
in einem iFrame an, um das DOM durch Senden einer Nachricht überpostMessage()
zu bearbeiten.https://video.example.com
manipuliert das DOM, sobald die Nachricht eingeht, und informiert das übergeordnete Element über den Erfolg.https://parent.example.com
erkennt 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 und finden Sie heraus, wie es funktioniert. Wenn du bestimmte Anforderungen hast, die nicht mit postMessage()
oder der Channel Messaging API funktionieren, teile uns dies auf Twitter über @ChromiumDev mit oder stelle auf Stack Overflow ein document.domain
-Tag zur Verfügung.
Als letzte Möglichkeit können Sie den Header Origin-Agent-Cluster: ?0
senden.
Wenn Sie gute Gründe haben, document.domain
weiter festzulegen, können Sie den Antwortheader Origin-Agent-Cluster: ?0
zusammen mit dem Zieldokument senden.
Origin-Agent-Cluster: ?0
Der Header Origin-Agent-Cluster
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 Leistungsisolation mit dem Origin-Agent-Cluster
-Header anfordern.
Wenn Sie diesen Header senden, kann Ihr Dokument weiterhin document.domain
festlegen, auch wenn er standardmäßig unveränderlich wird.
Alle anderen Dokumente, für die dieses Verhalten erforderlich ist, müssen ebenfalls eine Origin-Agent-Cluster
senden. (Beachten Sie, dass document.domain
keine Auswirkungen hat, wenn sie nur von einem Dokument festgelegt wird).
OriginAgentClusterDefaultEnabled
für Unternehmensrichtlinie konfigurieren
Optional kann Ihr Administrator die Richtlinie OriginAgentClusterDefaultEnabled
auf false
konfigurieren, damit document.domain
standardmäßig auf Chrome-Instanzen in Ihrer Organisation festgelegt werden kann. Weitere Informationen finden Sie unter Chrome Enterprise-Richtlinienliste und -verwaltung | Dokumentation.
Ressourcen
Document.domain
– Web APIs | MDN- Ursprungsisolierung und Einstellung
document.domain
document.domain
wird eingestellt. · Problem Nr. 564 · w3ctag/design-reviews
Danksagungen
Foto von Finan Akbar bei Unsplash