HTTP Permissions-Policy document-domain

Typ

Die document-domain-Direktive steuert den Zugriff auf die veraltete document.domain API für Same-Site-Cross-Origin-Zugriff.

Syntax

Die Direktive definiert eine Allowlist für Ursprünge, die document.domain setzen dürfen.

http
Permissions-Policy: document-domain=(self)
Permissions-Policy: document-domain=(self "https://legacy.example.com")
Permissions-Policy: document-domain=()

Direktiven

Die Direktive unterstützt Standard-Allowlist-Werte für präzise Zugriffssteuerung.

self
Erlaubt document.domain-Nutzung nur für das Hauptdokument des gleichen Ursprungs. Eingebettete iFrames von anderen Ursprüngen werden blockiert.
origin-list
Liste von Ursprüngen in Anführungszeichen, z.B. "https://app.legacy.example.com", die zusätzlich zum Hauptdokument document.domain verwenden dürfen. Für Legacy-Anwendungen.

Beispiele

Die folgenden Beispiele zeigen Legacy-Anwendungsfälle und Migration zu modernen Alternativen.

Legacy-Subdomain-Kommunikation

Eine ältere Anwendung erlaubt document.domain für Kommunikation zwischen Subdomains.

http
HTTP/1.1 200 OK
Content-Type: text/html
Permissions-Policy: document-domain=(self)

<!DOCTYPE html>
<html>
<head><title>Legacy App</title></head>
<body>
  <script>
    // Legacy approach - not recommended
    document.domain = 'example.com';
    const iframe = document.getElementById('partner');
    iframe.contentWindow.legacyFunction();
  </script>
  <iframe id="partner" src="https://partner.example.com/widget"></iframe>
</body>
</html>

Moderne Alternative mit postMessage

Eine moderne Anwendung deaktiviert document.domain und verwendet postMessage für Cross-Origin-Kommunikation.

http
HTTP/1.1 200 OK
Content-Type: text/html
Permissions-Policy: document-domain=()

<!DOCTYPE html>
<html>
<head><title>Modern App</title></head>
<body>
  <script>
    const iframe = document.getElementById('partner');
    iframe.contentWindow.postMessage({action: 'getData'}, 'https://partner.example.com');
    window.addEventListener('message', (event) => {
      if (event.origin === 'https://partner.example.com') {
        console.log('Received:', event.data);
      }
    });
  </script>
  <iframe id="partner" src="https://partner.example.com/widget"></iframe>
</body>
</html>

REST-API ohne Legacy-APIs

Ein API-Endpunkt deaktiviert alle veralteten APIs für moderne Architektur.

http
HTTP/1.1 200 OK
Content-Type: application/json
Permissions-Policy: document-domain=()

{
  "status": "success",
  "api_version": "2.0"
}

Vorteile für die Systemarchitektur

  • Blockiert Nutzung veralteter document.domain API in modernen Anwendungen
  • Erzwingt Migration zu sicheren Alternativen wie postMessage oder CORS
  • Verhindert Sicherheitsprobleme durch Same-Origin-Policy-Relaxation
  • Unterstützt Deprecation-Strategie für Legacy-Browser-APIs

Spezifikation

Definiert in der W3C Permissions Policy Spezifikation. document.domain API ist veraltet und wird schrittweise aus Browsern entfernt. Empfohlen: Migration zu postMessage.

Weitere Spezifikationen

Permissions-Policy Header, Content-Security-Policy Header