Zum Hauptinhalt springen




Finden Sie heraus, warum eine Cross-Origin-Isolation erforderlich ist, um leistungsstarke Funktionen wie z SharedArrayBuffer, performance.measureMemory ()und die JS-API zur Selbstprofilierung.

Es erscheint in:
Gesichert und geladen

Einführung

In Wie Sie Ihre Website mit COOP und COEP "Cross-Origin-isoliert" machen, haben wir erklärt, wie Sie mit COOP und COEP "Cross-Origin-isoliert" werden. In diesem Begleitartikel wird erläutert, warum eine originensübergreifende Isolierung erforderlich ist, um leistungsstarke Funktionen im Browser zu aktivieren.

Schlüsselbegriff:
Dieser Artikel verwendet viele ähnlich klingende Terminologien. Um die Dinge zu klären, definieren wir sie:

Hintergrund

Das Web basiert auf Richtlinien mit demselben Ursprung - eine Sicherheitsfunktion, die die Interaktion von Dokumenten und Skripten mit Ressourcen eines anderen Ursprungs einschränkt. Dieses Prinzip schränkt die Art und Weise ein, wie Websites auf Ressourcen zwischen verschiedenen Ursprüngen zugreifen können. Zum Beispiel ein Dokument von https://a.example kann nicht auf die Daten zugreifen, auf denen gehostet wird https://b.example.

Die Politik des gleichen Ursprungs hatte jedoch einige historische Ausnahmen. Jede Website kann:

  • Integrieren Sie originübergreifende Iframes
  • Fügen Sie originensübergreifende Ressourcen wie Bilder oder Skripte hinzu
  • Öffnen Sie originalübergreifende Popups mit einer DOM-Referenz

Wenn das Web von Grund auf neu gestaltet werden könnte, gäbe es diese Ausnahmen nicht. Als die Web-Community die Hauptvorteile einer strengen Richtlinie mit gleichem Ursprung erkannte, stützte sich das Web leider bereits auf diese Ausnahmen.

Die sicherheitstechnischen Nebenwirkungen einer solchen laxen Richtlinie mit gleichem Ursprung wurden auf zwei Arten korrigiert. Eine Möglichkeit war die Einführung eines neuen Protokolls namens Cross-Origin Resource Sharing (CORS)
Der Zweck besteht darin, sicherzustellen, dass der Server die gemeinsame Nutzung einer Ressource mit einem bestimmten Ursprung ermöglicht. Die andere Möglichkeit besteht darin, die Verknüpfung des Skripts zu Ursprungsressourcen implizit zu entfernen und gleichzeitig die Abwärtskompatibilität zu gewährleisten. Diese originensübergreifenden Ressourcen werden als "undurchsichtige" Ressourcen bezeichnet. Dies ist beispielsweise der Grund, warum die Pixel in einem Kreuzursprungsbild mit bearbeitet werden CanvasRenderingContext2D
schlägt fehl, es sei denn, CORS wird auf das Bild angewendet.

Alle diese Richtlinienentscheidungen finden in einer Gruppe von Navigationskontexten statt.

Browsing-Kontext-Gruppe-7003601

Lange Zeit reichte die Kombination von CORS und undurchsichtigen Ressourcen aus, um die Sicherheit der Browser zu gewährleisten. Manchmal extreme Fälle (wie JSON-Schwachstellen) wurden entdeckt und mussten gepatcht werden, aber insgesamt war das Prinzip, keinen direkten Lesezugriff auf Rohbytes von Ursprungsressourcen zuzulassen, erfolgreich.

All dies änderte sich mit
SpektrumDadurch werden alle Daten, die in dieselbe Navigationskontextgruppe wie Ihr Code geladen werden, möglicherweise lesbar. Ja evil.com Wenn Sie ein Cross-Origin-Bild einbetten, können diese mithilfe eines Spectre-Angriffs Ihre Pixeldaten lesen, wodurch Schutzmaßnahmen, die auf "Deckkraft" beruhen, unwirksam werden.

böser Schauspieler-4226335

Im Idealfall sollten alle Ursprungsanforderungen explizit von dem Server geprüft werden, dem die Ressource gehört. Wenn der Server, dem die Ressourcen gehören, die Überprüfung nicht bereitstellt, erreichen die Daten niemals die Browserkontextgruppe eines böswilligen Akteurs und bleiben somit außerhalb der Reichweite eines Spectre-Angriffs, den eine Webseite ausführen kann. Wir nennen es einen isolierten Cross-Origin-Zustand. Genau darum geht es bei COOP + COEP.

In einem isolierten Cross-Origin-Zustand wird die anfordernde Site als weniger gefährlich angesehen, und dadurch werden leistungsstarke Funktionen wie freigeschaltet SharedArrayBuffer,
performance.measureMemory und die JS Self-Profiling-API, die andernfalls für Spectre-ähnliche Angriffe verwendet werden könnte. Vermeiden Sie auch Änderungen document.domain.

Ursprungsübergreifende Einbettungsrichtlinie

Cross Origin Embedding Policy (COEP) verhindert, dass ein Dokument Ursprungsressourcen lädt, die die Berechtigung des Dokuments nicht explizit erteilen (mithilfe von CORP oder CORS). Mit dieser Funktion können Sie deklarieren, dass ein Dokument solche Ressourcen nicht laden kann.

coep-2483234

Fügen Sie dem Dokument den folgenden HTTP-Header hinzu, um diese Richtlinie zu aktivieren:

 require-corp

das require-corp Das Schlüsselwort ist der einzige akzeptierte Wert für COEP. Dadurch wird die Richtlinie erzwungen, dass das Dokument nur Ressourcen aus derselben Quelle oder Ressourcen laden kann, die explizit als aus einer anderen Quelle ladbar markiert sind.

Damit Ressourcen aus einer anderen Quelle geladen werden können, müssen sie CORS (Cross-Origin Resource Sharing) oder CORP (Cross-Origin Resource Policy) unterstützen.

Ursprungsübergreifende gemeinsame Nutzung von Ressourcen

Wenn eine originensübergreifende Ressource unterstützt Cross-Origin Resource Sharing (CORS), du kannst den ... benutzen
Crossorigin

Attribut
um es auf Ihre Website hochzuladen, ohne von COEP blockiert zu werden.

<img src="https://third-party.example.com/image.jpg" Crossorigin>

Wenn diese Bildressource beispielsweise mit CORS-Headern bereitgestellt wird, verwenden Sie die
Crossorigin Attribut für die Anforderung, die zu verwendende Ressource abzurufen CORS-Modus. Dies verhindert auch, dass das Bild geladen wird, es sei denn, Sie legen CORS-Header fest.

Ebenso können Sie originensübergreifende Daten über das abrufen fetch () Methode, die keine spezielle Behandlung erfordert, solange der Server mit antwortet die richtigen HTTP-Header.

Ursprungsübergreifende Ressourcenrichtlinie

Cross Origin Resource Policy (CORP)
Es wurde ursprünglich als Option eingeführt, um Ihre Ressourcen vor dem Hochladen durch eine andere Quelle zu schützen. Im Kontext von COEP kann CORP die Richtlinie des Ressourcenbesitzers angeben, wer eine Ressource hochladen darf.

das Herkunftsübergreifende Ressourcenrichtlinie Der Header nimmt drei mögliche Werte an:

 gleiche Seite

Ressourcen, die markiert sind gleiche Seite Es kann nur von derselben Site hochgeladen werden.

 gleicher Herkunft

Ressourcen, die markiert sind gleicher Herkunft Es kann nur von derselben Quelle geladen werden.

 Cross-Origin

Ressourcen, die markiert sind Cross-Origin kann auf jede Website hochgeladen werden. ((Dieser Wert wurde zusammen mit COEP zur CORP-Spezifikation hinzugefügt.)

Sobald Sie den COEP-Header hinzugefügt haben, können Sie die Einschränkung nicht mehr mit Servicemitarbeitern umgehen. Wenn das Dokument durch einen COEP-Header geschützt ist, wird die Richtlinie berücksichtigt, bevor die Antwort in den Dokumentprozess eingeht oder bevor sie in den Servicemitarbeiter eingeht, der das Dokument steuert.

Ursprungsübergreifende Eröffnungspolitik

Ursprungsübergreifende Eröffnungsrichtlinie (COOP) Mit dieser Option können Sie sicherstellen, dass ein Fenster der obersten Ebene von anderen Dokumenten isoliert ist, indem Sie sie in eine andere Browserkontextgruppe einfügen, damit sie nicht direkt mit dem Fenster der obersten Ebene interagieren können. Wenn ein Dokument mit COOP beispielsweise ein Popup-Fenster öffnet, wird sein
window.opener Das Eigentum wird sein Null. Er auch .geschlossen Die Eigenschaft der Opener-Referenz wird zurückgegeben wahr.

coop1-5099034

das Cross-Origin-Opener-Policy Der Header nimmt drei mögliche Werte an:

 gleicher Herkunft

Dokumente, die markiert sind gleicher Herkunft Sie können dieselbe Navigationskontextgruppe mit Dokumenten desselben Ursprungs teilen, die ebenfalls explizit gekennzeichnet sind gleicher Herkunft.

coop2-4629616

 Popups mit gleichem Ursprung zulassen

Ein Dokument der obersten Ebene mit Popups mit gleichem Ursprung zulassen behält Verweise auf Ihre Popups bei, die COOP nicht festlegen oder sich dafür entscheiden, durch Isolieren von COOP aus der Isolation auszubrechen unsicher-keine.

coop3-3834529

 unsicher-keine

unsicher-keine ist die Standardeinstellung und ermöglicht das Hinzufügen des Dokuments zur Scan-Kontextgruppe des Openers, es sei denn, der Opener verfügt über einen COOP von gleicher Herkunft.

das
Noopener

Das Attribut hat einen ähnlichen Effekt wie Sie es von COOP erwarten würden, außer dass es nur von der Öffnerseite aus funktioniert. (Sie können die Verknüpfung Ihres Fensters nicht aufheben, wenn Sie von einem Dritten geöffnet werden.) Wenn angebracht Noopener so etwas tun
window.open (URL, '_blank', 'noopener') oder <a target="_blank" rel="noopener">können Sie Ihr Fenster absichtlich vom geöffneten Fenster trennen.

Während Noopener kann durch COOP ersetzt werden. Es ist dennoch nützlich, wenn Sie Ihre Website in Browsern schützen möchten, die COOP nicht unterstützen.

Zusammenfassung

Wenn Sie garantierten Zugriff auf leistungsstarke Funktionen wie möchten SharedArrayBuffer,
performance.measureMemory o JS Self-Profiling-API, denken Sie daran, dass Ihr Dokument COEP mit dem Wert von verwenden muss require-corp und COOP mit dem Wert von gleicher Herkunft. Wenn keiner von ihnen vorhanden ist, garantiert der Browser keine ausreichende Isolation, um diese leistungsstarken Funktionen sicher zu aktivieren. Sie können den Status Ihrer Seite ermitteln, indem Sie prüfen, ob
self.crossOriginIsolated

kehrt zurück wahr.

Die Schritte zur Implementierung finden Sie unter So machen Sie Ihre Website mithilfe von COOP und COEP "Cross-Origin-isoliert".

Meint