HTTP-Cross-Origin-Opener-Policy-Header

Typ

Der Cross-Origin-Opener-Policy-Header ist ein HTTP-Response-Header, mit dem der Server die Browsing-Context-Isolation steuert und Spectre-Angriffe über Window-Referenzen verhindert.

Syntax

Der Header definiert die Policy für die Isolation des Browsing Context von Cross-Origin-Dokumenten.

http
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin-allow-popups

Direktiven

Der Cross-Origin-Opener-Policy-Header verwendet folgende Direktiven:

same-origin
Isoliert das Dokument vollständig von Cross-Origin-Dokumenten. Verhindert window.opener-Zugriff und aktiviert Cross-Origin-Isolation zusammen mit COEP.
same-origin-allow-popups
Erlaubt, dass Popups ohne COOP-Header vom Dokument geöffnet werden, während eingehende Cross-Origin-Opener blockiert werden.
unsafe-none
Standardverhalten ohne Isolation. Erlaubt gegenseitigen Zugriff zwischen Cross-Origin-Dokumenten über window.opener.

Beispiele

API mit vollständiger Cross-Origin-Isolation

Eine Web-Anwendung aktiviert vollständige Cross-Origin-Isolation für sichere API-Nutzung:

http
GET /app/secure-workspace.html HTTP/1.1
Host: app.example.com

Der Server aktiviert COOP zusammen mit COEP:

http
HTTP/1.1 200 OK
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Content-Type: text/html

<!DOCTYPE html>
<html>
<head><title>Secure Workspace</title></head>
<body>
  <script>
    // SharedArrayBuffer ist verfügbar
    const buffer = new SharedArrayBuffer(1024);
    console.log('Cross-origin isolated:', crossOriginIsolated); // true
  </script>
</body>
</html>

OAuth-Flow mit Popup-Isolation

Eine API implementiert OAuth mit Popup-Fenster, erlaubt aber keine eingehenden Cross-Origin-Opener:

http
GET /oauth/authorize HTTP/1.1
Host: auth.example.com

Der Authorization Server erlaubt Popups ohne COOP:

http
HTTP/1.1 200 OK
Cross-Origin-Opener-Policy: same-origin-allow-popups
Content-Type: text/html

<!DOCTYPE html>
<html>
<body>
  <button onclick="window.open('/consent', '_blank')">Authorize</button>
  <script>
    // Popup kann ohne COOP geöffnet werden
    // aber eingehende Cross-Origin-Opener sind blockiert
  </script>
</body>
</html>

Report-Only-Modus für COOP-Migration

Eine API testet COOP-Implementierung ohne Enforcement:

http
GET /dashboard HTTP/1.1
Host: api.example.com

Der Server sammelt COOP-Violations:

http
HTTP/1.1 200 OK
Cross-Origin-Opener-Policy-Report-Only: same-origin
Report-To: {"group":"coop-endpoint","max_age":86400,"endpoints":[{"url":"https://api.example.com/reports/coop"}]}
Content-Type: text/html

<!DOCTYPE html>
<html>
<body>
  <a href="https://external.example.com" target="_blank">External Link</a>
</body>
</html>

Cross-Origin-Isolation-with-COOP-Flow

Der Ablauf der Browser-Prozess-Isolation mit COOP für sichere API-Kommunikation.

plantuml
@startuml
actor User
participant "Main App\n(app.example.com)" as App
participant "Browser Process" as Browser
participant "External Site\n(external.com)" as External

User -> App: Navigate to /app
App --> Browser: 200 OK\nCross-Origin-Opener-Policy: same-origin\nCross-Origin-Embedder-Policy: require-corp

Browser -> Browser: Create isolated\nbrowsing context\ncrossOriginIsolated = true

User -> App: Click external link\ntarget="_blank"
App -> Browser: window.open(external.com)

Browser -> External: GET /page
External --> Browser: 200 OK\n(no COOP header)

Browser -> Browser: Open in separate\nbrowsing context group\nNo window.opener access

External -x App: Cannot access\nwindow.opener (null)
App -x External: Cannot access\nopened window

note right
Process isolation prevents
Spectre attacks via
cross-origin window access
end note
@enduml

Vorteile für die Systemarchitektur

  • Verhindert Spectre-Angriffe durch strikte Browsing-Context-Isolation
  • Ermöglicht Nutzung von SharedArrayBuffer und high-precision timers in isolierten Kontexten
  • Schützt sensitive API-Daten vor Cross-Origin-Zugriffen über window.opener
  • Report-Only-Modus erlaubt Impact-Analyse vor vollständiger Aktivierung
  • Kombiniert mit COEP entsteht vollständige Cross-Origin-Isolation für maximale Sicherheit

Spezifikation

Der Cross-Origin-Opener-Policy-Header ist in der HTML-Spezifikation definiert.

Weitere Spezifikationen

Cross-Origin-Embedder-Policy Header, Cross-Origin-Resource-Policy Header