Incorpora in modo sicuro i contenuti in una pagina senza condividere dati tra siti.
Stato dell'implementazione
- Pianificato per il ritiro graduale.
- Intent to Ship: Remove FencedFrame element and window.fence APIs
- Stato della piattaforma Chrome
Perché abbiamo bisogno dei frame isolati?
Un frame isolato (<fencedframe>) è un elemento HTML per i contenuti incorporati, simile a un iframe. A differenza degli iframe, un frame isolato limita la comunicazione con il contesto di incorporamento per consentire al frame di accedere ai dati tra siti senza condividerli con il contesto di incorporamento. Alcune API Privacy Sandbox
potrebbero richiedere il rendering di documenti selezionati all'interno di un frame isolato.
Allo stesso modo, i dati proprietari nel contesto di incorporamento non possono essere condivisi con il frame isolato.
Ad esempio, se news.example (il contesto di incorporamento) incorpora un annuncio di shoes.example in un frame isolato, news.example non può esfiltrare i dati dall'annuncio shoes.example e shoes.example non può apprendere i dati proprietari da news.example.
Rafforzare la privacy tra siti con il partizionamento dello spazio di archiviazione
Durante la navigazione sul web, probabilmente hai guardato i prodotti su un sito e poi li hai visti apparire di nuovo in un annuncio su un sito completamente diverso.
Oggi, questa tecnica pubblicitaria viene realizzata principalmente tramite una tecnologia di monitoraggio che utilizza cookie di terze parti per condividere informazioni tra i siti.
Chrome sta lavorando al partizionamento
dello spazio di archiviazione, che
separa lo spazio di archiviazione del browser per sito. Senza il partizionamento, se un iframe di shoes.example è incorporato in news.example e l'iframe memorizza un valore nello spazio di archiviazione, questo valore può essere letto dal sito shoes.example. Quando lo spazio di archiviazione è stato partizionato, gli iframe tra siti non condivideranno più lo spazio di archiviazione, quindi shoes.example non sarà in grado di accedere alle informazioni memorizzate dall'iframe. Se
l'iframe viene pubblicato da *.shoes.example e incorporato in
*.shoes.example, lo spazio di archiviazione del browser verrà condiviso perché questi siti sono considerati dello stesso sito.
Il partizionamento dello spazio di archiviazione verrà applicato alle API di archiviazione standard, inclusi LocalStorage, IndexedDB e cookie. In un mondo partizionato, la fuga di informazioni nello spazio di archiviazione proprietario verrà ridotta in modo significativo.
Utilizzare i dati tra siti
I frame isolati sono una funzionalità di Privacy Sandbox che suggerisce ai siti di primo livello di partizionare i dati. Molte proposte e API Privacy Sandbox mirano a soddisfare i casi d'uso tra siti senza cookie di terze parti o altri meccanismi di monitoraggio. Ad esempio:
- L'API Protected Audience consente la pubblicazione di annunci basati sugli interessi in modo che tutela la privacy.
- Shared Storage consente l'accesso ai dati tra siti non partizionati in un ambiente sicuro.
I frame isolati sono progettati per funzionare con l'API Protected Audience. Con l'API Protected Audience, gli interessi di un utente vengono registrati sul sito di un inserzionista in gruppi di interesse, insieme agli annunci che potrebbero interessare l'utente. Poi, su un sito separato (noto come "publisher"), gli annunci registrati nei gruppi di interesse pertinenti vengono messi all'asta e l'annuncio vincente viene visualizzato in un frame isolato.
Se il publisher visualizza l'annuncio vincente in un iframe e lo script può leggere l'attributo src dell'iframe, il publisher può dedurre informazioni sugli interessi del visitatore dall'URL dell'annuncio. Questo non rispetta la privacy.
Con un frame isolato, il publisher potrebbe visualizzare un annuncio che corrisponde agli interessi dei visitatori, ma l'attributo src e il gruppo basato sugli interessi saranno noti solo all'inserzionista nel frame. Il publisher non può accedere a queste informazioni.
Come funzionano i frame isolati?
I frame isolati utilizzano l'oggetto FencedFrameConfig per la navigazione. Questo oggetto può essere restituito da un'asta dell'API Protected Audience o dall'operazione di selezione dell'URL di Shared Storage. L'oggetto di configurazione viene quindi impostato come attributo config nell'elemento del frame isolato. Questo è diverso da un iframe in cui un URL o un URN opaco URN viene assegnato all'attributo src. L'oggetto FencedFrameConfig ha una proprietà url di sola lettura; tuttavia, poiché i casi d'uso attuali richiedono che l'URL effettivo della risorsa interna sia nascosto, questa proprietà restituisce la stringa opaque quando viene letta.
Un frame isolato non può utilizzare postMessage per comunicare con il suo incorporatore. Tuttavia, un frame isolato può utilizzare postMessage con gli iframe all'interno del frame isolato.
I frame isolati verranno isolati dal publisher in altri modi. Ad esempio, il publisher non avrà accesso al DOM all'interno di un frame isolato e il frame isolato non potrà accedere al DOM del publisher. Inoltre, gli attributi come name, che possono essere impostati su qualsiasi valore e osservati dal publisher, non sono disponibili nei frame isolati.
I frame isolati si comportano come un contesto di navigazione di primo livello (ad esempio una scheda del browser). Sebbene un frame isolato in determinati casi d'uso (ad esempio gli annunci di retargeting basati sugli interessi) possa contenere dati tra siti (ad esempio un gruppo di interesse dell'API Protected Audience), il frame non può accedere allo spazio di archiviazione o ai cookie non partizionati. Il frame isolato può accedere a una partizione di cookie e spazio di archiviazione univoca basata su nonce.
Le caratteristiche dei frame isolati sono descritte in modo più dettagliato nell' explainer.
Quali sono le differenze tra i frame isolati e gli iframe?
Ora che sai cosa faranno e cosa non faranno i frame isolati, è utile confrontarli con le funzionalità iframe esistenti.
| Funzionalità | iframe |
fencedframe |
|---|---|---|
| Incorporare contenuti | Sì | Sì |
| I contenuti incorporati possono accedere al DOM del contesto di incorporamento | Sì | No |
| Il contesto di incorporamento può accedere al DOM dei contenuti incorporati | Sì | No |
Attributi osservabili, ad esempio name |
Sì | No |
URL (http://example.com) |
Sì | Sì (a seconda del caso d'uso) |
Origine opaca gestita dal browser (urn:uuid) |
No | Sì (a seconda del caso d'uso) |
| Accesso ai dati tra siti | No | Sì (a seconda del caso d'uso) |
I frame isolati supportano meno opzioni di comunicazione esterna per preservare la privacy.
I frame isolati sostituiranno gli iframe?
In definitiva, i frame isolati non sostituiranno gli iframe e non dovrai utilizzarli. I frame isolati sono un frame più privato da utilizzare quando i dati di diverse partizioni di primo livello devono essere visualizzati sulla stessa pagina.
Gli iframe dello stesso sito (a volte noti come iframe friendly) sono considerati contenuti attendibili.
Utilizzare i frame isolati
I frame isolati funzioneranno in combinazione con altre API Privacy Sandbox per visualizzare i documenti di diverse partizioni di archiviazione all'interno di una singola pagina. Le potenziali API sono in fase di discussione.
I candidati attuali per questa combinazione includono:
- Dalla famiglia di API TURTLEDOVE (che è la base dell'API Protected Audience), i frame isolati potrebbero funzionare con la misurazione del conversion lift utilizzando Shared Storage.
- Un'altra opzione è consentire ai frame isolati di essere di sola lettura o di accedere allo spazio di archiviazione non partizionato.
Per maggiori dettagli, consulta l'explainer dei casi d'uso dei frame isolati.
Esempi
Per ottenere un oggetto config del frame isolato, devi passare resolveToConfig: true alla chiamata runAdAuction() dell'API Protected Audience o alla chiamata selectURL() di Shared Storage. Se la proprietà non viene aggiunta (o è impostata su false), la promessa risultante verrà risolta in un URN che può essere utilizzato solo in un iframe.
const frameConfig = await navigator.runAdAuction({ // ...auction configuration resolveToConfig: true });
const frameConfig = await sharedStorage.selectURL('operation-name', { resolveToConfig: true });
Una volta ottenuta la configurazione, puoi assegnarla all'attributo config di un frame isolato per spostare il frame alla risorsa rappresentata dalla configurazione. Le versioni precedenti di Chrome non supportano la proprietà resolveToConfig, quindi devi comunque verificare che la promessa sia stata risolta in un FencedFrameConfig prima di navigare:
if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) { const frame = document.createElement('fencedframe'); frame.config = frameConfig; }
Per saperne di più, consulta gli explainer di Fenced Frame e Fenced Frame Config.
Intestazioni
I browser imposteranno Sec-Fetch-Dest: fencedframe per le richieste effettuate da frame isolati e iframe incorporati in un frame isolato.
Sec-Fetch-Dest: fencedframe
Il server deve impostare l'intestazione della risposta Supports-Loading-Mode: fenced-frame affinché un documento venga caricato in un frame isolato. L'intestazione deve essere presente anche per gli iframe all'interno di un frame isolato.
Supports-Loading-Mode: fenced-frame
Contesto di Shared Storage
Potresti voler utilizzare Private Aggregation per segnalare i dati a livello di evento nei frame isolati associati ai dati contestuali dell'incorporatore. Utilizzando il metodo fencedFrameConfig.setSharedStorageContext(), puoi passare alcuni dati contestuali, ad esempio un ID evento, dall'incorporatore ai worklet di Shared Storage avviati dall'API Protected Audience.
Nell'esempio seguente, memorizziamo alcuni dati disponibili nella pagina dell'incorporatore e alcuni dati disponibili nel frame isolato in Shared Storage. Dalla pagina dell'incorporatore, un ID evento fittizio viene impostato come contesto di Shared Storage. Dal frame isolato, vengono passati i dati sugli eventi del frame.
Dalla pagina dell'incorporatore, puoi impostare i dati contestuali come contesto di Shared Storage:
const frameConfig = await navigator.runAdAuction({ resolveToConfig: true });
// Data from the embedder that you want to pass to the shared storage worklet
frameConfig.setSharedStorageContext('some-event-id');
const frame = document.createElement('fencedframe');
frame.config = frameConfig;
Dal frame isolato, puoi passare i dati a livello di evento dal frame al worklet di Shared Storage (non correlati ai dati contestuali dell'incorporatore sopra):
const frameData = {
// Data available only inside the fenced frame
}
await window.sharedStorage.worklet.addModule('reporting-worklet.js');
await window.sharedStorage.run('send-report', {
data: {
frameData
},
});
Puoi leggere le informazioni contestuali dell'incorporatore da sharedStorage.context e i dati a livello di evento del frame dall'oggetto data, quindi segnalarli tramite Private Aggregation:
class ReportingOperation {
convertEventIdToBucket(eventId) { ... }
convertEventPayloadToValue(info) { ... }
async run(data) {
// Data from the embedder
const eventId = sharedStorage.context;
// Data from the fenced frame
const eventPayload = data.frameData;
privateAggregation.contributeToHistogram({
bucket: convertEventIdToBucket(eventId),
value: convertEventPayloadToValue(eventPayload)
});
}
}
register('send-report', ReportingOperation);
Per saperne di più sul contesto dell'incorporatore in un oggetto di configurazione del frame isolato, consulta l'explainer.
Provare i frame isolati
Utilizza i flag di Chromeper attivare l'API Fenced Frame all'indirizzo chrome://flags/#enable-fenced-frames.
Nella finestra di dialogo sono disponibili diverse opzioni. Ti consigliamo vivamente di selezionare *Attiva*, che consente a Chrome di aggiornarsi automaticamente alla nuova architettura non appena sarà disponibile.
Le altre opzioni, Attivato con ShadowDOM e Attivato con architettura a più pagine, offrono strategie di implementazione diverse che sono pertinenti solo per gli ingegneri del browser. Oggi, Attiva funziona allo stesso modo di Attivato con ShadowDOM. In futuro, Attiva verrà mappato su Attiva con architettura a più pagine.
Rilevamento delle funzionalità
Per determinare se i frame isolati sono definiti:
if (window.HTMLFencedFrameElement) {
// The fenced frame element is defined
}
Per determinare se la configurazione del frame isolato è disponibile:
if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) {
// The fenced frame config is available
}
Supporto browser
Partecipa e condividi feedback
I frame isolati sono in fase di discussione attiva e sono soggetti a modifiche in futuro. Se provi questa API e hai feedback, non esitare a comunicarcelo.
- GitHub: leggi l'explainer, poni domande e segui la discussione.