Le risorse cross-origin pubblicate da terze parti spesso non includono intestazioni CORP adeguate. Se possono essere richieste senza credenziali, ora puoi attivare l'isolamento cross-origin contrassegnandole come tali.
Abbiamo rilasciato il nuovo valore del criterio di incorporamento tra origini (COEP)credentialless
che consente al browser di caricare risorse tra origini che non utilizzano il criterio delle risorse tra origini (CORP) inviando una richiesta senza credenziali, come i cookie. Ciò consente agli sviluppatori di adottare
più facilmente l'isolamento multiorigine.
Perché abbiamo bisogno dell'isolamento multiorigine
Alcune API web aumentano il rischio di attacchi side-channel come
Spectre. Per attenuare questo rischio, i browser offrono un ambiente isolato basato su attivazione chiamato isolamento multiorigine. Con uno stato di isolamento tra origini, la pagina web può utilizzare funzionalità privilegiate, tra cui SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
e timer ad alta precisione con una risoluzione migliore, isolando al contempo l'origine dalle altre, a meno che non siano attivate.
La pagina web deve inviare due intestazioni HTTP per attivare l'isolamento multiorigine:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
In uno stato isolato multiorigine, tutte le risorse multiorigine devono essere gestite tramite CORS o impostare un'intestazione Cross-Origin-Resource-Policy
da caricare.
Problemi relativi all'attivazione dell'isolamento multiorigine
Sebbene l'isolamento cross-origin offra alle pagine web una maggiore sicurezza e la possibilità di attivare funzionalità potenti, il suo implementazione può essere difficile. Uno dei maggiori problemi è il requisito di attivare CORS o CORP per tutte le risorse cross-origin. Le risorse senza queste intestazioni non verranno caricate dal browser su una pagina isolata cross-origin.
Queste risorse cross-origin vengono in genere pubblicate da terze parti per le quali potrebbe non essere facile aggiungere le intestazioni necessarie.
Ma cosa succede se sappiamo che la risorsa è sufficientemente sicura da poter essere caricata? Infatti, le uniche risorse a rischio sono quelle richieste con credenziali, perché potenzialmente includono informazioni sensibili che l'utente malintenzionato non può caricare autonomamente. Ciò significa che le risorse che possono essere richieste senza credenziali sono disponibili pubblicamente e sicure da caricare.
credentialless
accorre in soccorso
È qui che entra in gioco COEP: credentialless
. credentialless
è un nuovo valore per l'intestazione Cross-Origin-Embedder-Policy
. Come require-corp
, può attivare l'isolamento multiorigine, ma anziché richiedere un'intestazione CORP:cross-origin
per le richieste cross-origin no-cors, queste vengono inviate senza credenziali (ad esempio i cookie).
In alternativa, potrai attivare l'isolamento multiorigine con le seguenti due intestazioni:
Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin
Ciò significa che il server cross-origin richiesto non potrà rispondere con una risorsa sensibile e l'autore della richiesta può sempre presumere che la risposta contenga solo informazioni disponibili pubblicamente.
Inoltre, è in linea con il piano dei browser di eliminare gradualmente i cookie di terze parti.
Demo
Puoi provare varie opzioni di intestazione in questa demo: https://cross-origin-isolation.glitch.me
Domande frequenti
Posso inviare una richiesta con credenziali in un ambiente credentialless
?
Assolutamente, a costo di modificare la modalità della richiesta in modo da richiedere un controllo CORS sulla risposta. Per i tag HTML come <audio>
, <img>
, <link>
, <script>
e <video>
, aggiungi semplicemente crossorigin="use-credentials"
in modo esplicito per informare
il browser di inviare richieste con credenziali.
Ad esempio, anche se un documento su https://www.example.com
ha l'intestazione Cross-Origin-Embedder-Policy: credentialless
, <img
src="https://images.example.com/avatar.png" crossorigin="use-credentials">
invierà una richiesta con credenziali.
Per l'API fetch()
, puoi utilizzare request.mode = 'cors'
.
COEP: credentialless
: in che modo COEP: require-corp
è ancora utile per il mio sito web?
COEP: require-corp
non richiede di passare manualmente dalla modalità di richiesta a CORS se sono necessari cookie per alcune sottorisorse multiorigine.
Posso anche caricare iframe multiorigine senza intestazioni speciali in un ambiente credentialless
?
No. Il caricamento di iframe cross-origin in un ambiente credentialless
richiede ancora le stesse condizioni di require-corp
. I documenti iframe devono essere pubblicati con due intestazioni:
Cross-Origin-Embedder-Policy: credentialless
(orequire-corp
)Cross-Origin-Resource-Policy: cross-origin
La buona notizia è che è in corso una discussione sul consentire il caricamento di iFrame cross-origin senza queste intestazioni assegnando agli iFrame crossorigin="anonymous"
.
In questo modo, gli iframe cross-origin verranno caricati senza intestazioni, ma senza credenziali.
Questa funzionalità verrà adottata da altri browser?
- Problema di monitoraggio con Firefox
- Richiesta di posizione Webkit: Nessun segnale
- Richiesta di posizione del TAG W3C: In attesa
Passaggi successivi
Sono previsti altri due aggiornamenti per mitigare altri problemi relativi all'isolamento multiorigine:
Chi si è registrato alla prova dell'origine di Chrome per estendere la modifica di SharedArrayBuffer a causa degli ostacoli sopra indicati potrebbe chiedersi quando verrà interrotta. Inizialmente abbiamo annunciato che la funzionalità verrà interrotta in Chrome 96, ma abbiamo deciso di posticipare questa operazione a Chrome 106.
Risorse
- Rendere il tuo sito web "isolato da origini diverse" utilizzando COOP e COEP
- Perché hai bisogno di "isolamento multiorigine" per funzionalità efficaci
- Una guida per attivare l'isolamento multiorigine
- Aggiornamenti di SharedArrayBuffer in Chrome per Android 88 e Chrome per computer 92
Foto di Martin Adams su Unsplash