Utilizza COOP e COEP per configurare un ambiente isolato multiorigine e attivare funzionalità avanzate come SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
e il timer ad alta risoluzione con maggiore precisione.
Aggiornamenti
- 21 giugno 2022: gli script worker richiedono attenzione anche durante l'isolamento multiorigine sia abilitato. Sono state aggiunte alcune spiegazioni.
- 5 agosto 2021: l'API JS Self-Profiling è stata menzionata come una delle API che richiedono l'isolamento multiorigine, ma riflettono la recente modifica , viene rimossa.
- 6 maggio 2021: in base ai feedback e ai problemi segnalati, abbiamo deciso di modificare
cronologia per l'utilizzo di
SharedArrayBuffer
in nessun sito isolato multiorigine in Chrome M92. - 16 aprile 2021: sono state aggiunte note relative alla nuova funzionalità COEP senza credenziali e COOP la stessa origine-allow-popups a essere un'atmosfera rilassata condizione per multiorigine e l'isolamento dei dati.
- 5 marzo 2021: sono state rimosse le limitazioni per
SharedArrayBuffer
.performance.measureUserAgentSpecificMemory()
e le funzionalità di debug, che ora sono completamente abilitate in Chrome 89. Aggiunta di funzionalità in arrivo,performance.now()
eperformance.timeOrigin
, avranno un valore più alto la precisione. - 19 febbraio 2021: è stata aggiunta una nota sulle norme relative alle funzionalità
allow="cross-origin-isolated"
e funzionalità di debug su DevTools. - 15 ottobre 2020:
self.crossOriginIsolated
è disponibile da Chrome 87. Di conseguenza,document.domain
è immutabile quandoself.crossOriginIsolated
restituiscetrue
.performance.measureUserAgentSpecificMemory()
sta terminando la prova dell'origine e è attiva per impostazione predefinita in Chrome 89. Il buffer array condiviso su Chrome per Android saranno disponibili da Chrome 88.
Alcune API web aumentano il rischio di attacchi side-channel come Spectre. A mitigazione del rischio, i browser offrono un ambiente isolato basato su attivazione, chiamato con isolamento multiorigine. Con uno stato isolato multiorigine, la pagina web verrà essere in grado di utilizzare funzionalità privilegiate, tra cui:
API | Descrizione |
---|---|
SharedArrayBuffer
|
Obbligatorio per i thread WebAssembly. Questa opzione è disponibile su Android Chrome 88. La versione desktop è attualmente abilitata per impostazione predefinita con aiuto di dell'isolamento dei siti, ma richiederà lo stato di isolamento multiorigine e verrà disattivata per impostazione predefinita in Chrome 92. |
performance.measureUserAgentSpecificMemory()
|
Disponibile da Chrome 89. |
performance.now() performance.timeOrigin
|
Attualmente disponibile in molti browser con una risoluzione limitata a 100 microsecondi o più. Con l'isolamento multiorigine, di rete può essere di 5 microsecondi o superiore. |
Lo stato di isolamento multiorigine impedisce anche le modifiche
document.domain
. (La capacità di modificare document.domain
consente la comunicazione
tra documenti dello stesso sito ed è stata considerata una via d'accesso
criterio della stessa origine).
Per attivare lo stato di isolamento multiorigine, devi inviare quanto segue Intestazioni HTTP nel documento principale:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Queste intestazioni indicano al browser di bloccare il caricamento di risorse o iframe che non hanno attivato il caricamento da parte di documenti multiorigine e impediscono che interagiscono direttamente con il documento. Anche questo significa che le risorse caricate multiorigine richiedono attivazioni.
Puoi determinare se una pagina web è in uno stato di isolamento multiorigine utilizzando
esaminare
self.crossOriginIsolated
Questo articolo spiega come utilizzare queste nuove intestazioni. In un follow-up articolo: fornirò maggiori informazioni di base e contesto.
di Gemini Advanced.Esegui il deployment di COOP e COEP per rendere il tuo sito web isolato multiorigine
Integra COOP e COEP
1. Imposta l'intestazione Cross-Origin-Opener-Policy: same-origin
sul documento di primo livello
Se attivi COOP: same-origin
in un documento di primo livello, le finestre con lo stesso
origine e le finestre aperte dal documento avranno una navigazione separata
gruppo di contesto, a meno che non si trovino nella stessa origine con la stessa impostazione COOP.
Pertanto, viene applicato l'isolamento per le finestre aperte e la comunicazione reciproca
entrambe le finestre siano disattivate.
Un gruppo di contesti di navigazione è un insieme di finestre che possono fare riferimento l'una all'altra. Per
ad esempio un documento di primo livello e i documenti secondari incorporati tramite <iframe>
.
Se un sito web (https://a.example
) apre una finestra popup (https://b.example
),
finestra popup e finestra di apertura condividono lo stesso contesto di navigazione,
possono accedere l'uno all'altro tramite le API DOM come window.opener
.
Puoi controllare se l'apertura delle finestre e quella che li ha aperti sono in una navigazione separata gruppi di contesto da DevTools.
2. Assicurati che per le risorse sia abilitato CORP o CORS
Assicurati che tutte le risorse nella pagina vengano caricate con HTTP CORP o CORS intestazioni. Questo passaggio è obbligatorio per il passaggio quattro, ovvero l'attivazione di COEP.
Ecco cosa devi fare a seconda della natura della risorsa:
- Se è previsto che la risorsa venga caricata solo dalla stessa origine, imposta
l'intestazione
Cross-Origin-Resource-Policy: same-origin
. - Se la risorsa dovrebbe essere caricata solo dallo stesso sito, ma attraversando
origin, imposta l'intestazione
Cross-Origin-Resource-Policy: same-site
. - Se la risorsa viene caricata da più origini sotto il tuo controllo, imposta la risorsa
Cross-Origin-Resource-Policy: cross-origin
, se possibile. - Per le risorse multiorigine su cui non hai controllo:
- Utilizza l'attributo
crossorigin
nel tag HTML di caricamento se la risorsa è gestito con CORS. Ad esempio<img src="***" crossorigin>
. - Chiedi al proprietario della risorsa di supportare CORS o CORP.
- Utilizza l'attributo
- Per gli iframe, segui gli stessi principi riportati sopra e imposta il parametro
Cross-Origin-Resource-Policy: cross-origin
(osame-site
,same-origin
a seconda del contesto). - Gli script caricati con un
WebWorker
devono essere pubblicati dalla stessa origine, in modo da non avere bisogno di intestazioni CORP o CORS. - Per un documento o un worker elaborato con
COEP: require-corp
, multiorigine Le risorse secondarie caricate senza CORS devono impostare l'intestazioneCross-Origin-Resource-Policy: cross-origin
per attivare l'incorporamento. Questo vale, ad esempio, per<script>
,importScripts
,<link>
,<video>
,<iframe>
e così via.
3. Utilizza l'intestazione HTTP COEP Report-Only per valutare le risorse incorporate
Prima di attivare completamente COEP, puoi eseguire una prova utilizzando
Intestazione Cross-Origin-Embedder-Policy-Report-Only
per esaminare se il criterio
funziona davvero. Riceverai report senza bloccare i contenuti incorporati.
Applicala in modo ricorsivo a tutti i documenti, incluso il documento di primo livello. iframe e script worker. Per informazioni sull'intestazione HTTP solo Report, consulta Rilevare i problemi utilizzando i report tramite Google Cloud.
4. Attiva COEP
Dopo aver confermato che tutto funziona e che tutte le risorse possono essere
caricato correttamente, cambia Cross-Origin-Embedder-Policy-Report-Only
all'intestazione Cross-Origin-Embedder-Policy
con lo stesso valore per tutte
documenti, inclusi quelli incorporati tramite iframe e script worker.
Determina se l'isolamento è riuscito con self.crossOriginIsolated
La proprietà self.crossOriginIsolated
restituisce true
quando la pagina web si trova in una
stato isolato multiorigine e tutte le risorse e le finestre sono isolate
lo stesso gruppo di contesti di navigazione. Puoi utilizzare questa API per determinare se
hai isolato correttamente il gruppo di contesto di navigazione e ottenuto l'accesso a
funzioni avanzate come performance.measureUserAgentSpecificMemory()
.
Debug dei problemi con Chrome DevTools
Per le risorse di cui viene eseguito il rendering sullo schermo, come le immagini, la procedura è piuttosto facile
per rilevare problemi relativi al COEP perché la richiesta verrà bloccata e la pagina verrà
indicare un'immagine mancante. Tuttavia, per le risorse che non
hanno necessariamente un impatto visivo, come script o stili, i problemi relativi al COEP potrebbero
passare inosservato. In questi casi, usa il riquadro Rete DevTools. Se
c'è un problema con il COEP, dovresti vedere
(blocked:NotSameOriginAfterDefaultedToSameOriginByCoep)
in Stato
colonna.
Puoi quindi fare clic sulla voce per visualizzare ulteriori dettagli.
Puoi anche determinare lo stato di iframe e finestre popup tramite la Riquadro Applicazione. Vai a "Frame" a sinistra espandi "in alto" per vedere la suddivisione della struttura delle risorse.
Puoi controllare lo stato dell'iframe, ad esempio la disponibilità di SharedArrayBuffer
,
ecc.
Puoi anche controllare lo stato delle finestre popup, ad esempio se sono multiorigine e isolata. .
Osservare i problemi utilizzando l'API di reporting
L'API di reporting è un altro meccanismo che ti consente di rilevare vari problemi. Puoi configurare l'API di reporting per indicare ai tuoi utente browser per inviare un report ogni volta che COEP blocca il caricamento di una risorsa o COOP isola una finestra popup. Chrome supporta l'API di reporting da versione 69 per diversi utilizzi, tra cui COEP e COOP.
Per scoprire come configurare l'API di reporting e impostare un server per ricevere consulta la sezione Uso dei rapporti tramite Google Cloud.
Esempio di report COEP
Esempio di COEP report quando la risorsa multiorigine è bloccata ha il seguente aspetto:
[{
"age": 25101,
"body": {
"blocked-url": "https://third-party-test.glitch.me/check.svg?",
"blockedURL": "https://third-party-test.glitch.me/check.svg?",
"destination": "image",
"disposition": "enforce",
"type": "corp"
},
"type": "coep",
"url": "https://cross-origin-isolation.glitch.me/?coep=require-corp&coop=same-origin&",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4249.0 Safari/537.36"
}]
Esempio di report COOP
Un esempio di COOP payload del report quando una finestra popup viene aperta isolata appare così:
[{
"age": 7,
"body": {
"disposition": "enforce",
"effectivePolicy": "same-origin",
"nextResponseURL": "https://third-party-test.glitch.me/popup?report-only&coop=same-origin&",
"type": "navigation-from-response"
},
"type": "coop",
"url": "https://cross-origin-isolation.glitch.me/coop?coop=same-origin&",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4246.0 Safari/537.36"
}]
Quando diversi gruppi di contesti di navigazione tentano di accedere l'uno all'altro (solo
"solo report" ), COOP invia anche una segnalazione. Ad esempio, un report quando
Il tentativo di postMessage()
ha il seguente aspetto:
[{
"age": 51785,
"body": {
"columnNumber": 18,
"disposition": "reporting",
"effectivePolicy": "same-origin",
"lineNumber": 83,
"property": "postMessage",
"sourceFile": "https://cross-origin-isolation.glitch.me/popup.js",
"type": "access-from-coop-page-to-openee"
},
"type": "coop",
"url": "https://cross-origin-isolation.glitch.me/coop?report-only&coop=same-origin&",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4246.0 Safari/537.36"
},
{
"age": 51785,
"body": {
"disposition": "reporting",
"effectivePolicy": "same-origin",
"property": "postMessage",
"type": "access-to-coop-page-from-openee"
},
"type": "coop",
"url": "https://cross-origin-isolation.glitch.me/coop?report-only&coop=same-origin&",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4246.0 Safari/537.36"
}]
Conclusione
Utilizza una combinazione di intestazioni HTTP COOP e COEP per attivare una pagina web in un'istanza speciale
con isolamento multiorigine. Potrai esaminare
self.crossOriginIsolated
per determinare se una pagina web è multiorigine
isolato.
Aggiorneremo questo post man mano che verranno rese disponibili nuove funzionalità stato isolato multiorigine e vengono apportati ulteriori miglioramenti a DevTools intorno a COOP e COEP.
Risorse
- Perché hai bisogno di un "isolamento multiorigine" per scoprire funzionalità potenti
- Una guida per attivare l'isolamento multiorigine
- Aggiornamenti di SharedArrayBuffer in Chrome 88 per Android e Chrome per desktop 102
- Monitora l'utilizzo totale della memoria della tua pagina web con
measureUserAgentSpecificMemory()