Incorpora in modo sicuro i contenuti in una pagina senza condividere dati tra siti.
Stato implementazione
Questo documento illustra un nuovo elemento HTML: <fencedframe>
.
- La proposta Fenced Frames è ora in disponibilità generale.
- Stato della piattaforma Chrome
Proposta | Stato |
---|---|
Modifiche all'API web per la configurazione Explainer |
Disponibile in Chrome nel primo trimestre del 2023. |
Macro delle creatività nei frame fecondati per i report sugli annunci (FFAR) Problema di GitHub |
Disponibile in Chrome nel terzo trimestre del 2023. |
Invia una volta beacon automatici Problema GitHub |
Disponibile in Chrome nel terzo trimestre del 2023. |
Configurazioni di frame fecondati serializzabili Problema GitHub |
Disponibile in Chrome nel terzo trimestre del 2023. |
Opzione di formato aggiuntiva per le macro delle dimensioni degli annunci Protected Audience Problema GitHub |
Disponibile in Chrome nel quarto trimestre del 2023. |
Invio automatico di beacon a tutti gli URL registrati Problema GitHub | Problema GitHub |
Disponibile in Chrome nel quarto trimestre del 2023. |
Attiva l'uscita dai gruppi di interesse per gli annunci dagli iframe e dai frame dei componenti degli annunci
Problema di GitHub |
Disponibile in Chrome nel primo trimestre del 2024 |
Presenta restricted.top_navigation_start/commit
problema di GitHub, problema di GitHub |
Disponibile in Chrome nel primo trimestre del 2024 |
Non disattivare l'impostazione dei cookie in ReportEvent fino al problema di GitHub di 3PCD |
Disponibile in Chrome nel primo trimestre del 2024 |
Aggiungi il supporto per i beacon automatici nei sottoframe multiorigine
Problema GitHub |
Disponibile in Chrome nel primo trimestre del 2024 |
Perché abbiamo bisogno di frame protetti?
Un frame recintato (<fencedframe>
) è un elemento HTML per i contenuti
incorporati, simile a un iframe. A differenza degli iframe, un frame recintato limita la comunicazione con il contesto di incorporamento per consentire al frame l'accesso 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 recintato.
Allo stesso modo, tutti i dati proprietari nel contesto di incorporamento non possono essere condivisi con il frame isolato.
Ad esempio, supponiamo che news.example
(il contesto di incorporamento) incorpora un annuncio da
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
.
Rafforza la privacy tra siti con il partizionamento dello spazio di archiviazione
Mentre navighi sul web, probabilmente hai guardato i prodotti su un sito e poi li hai visti riapparire in un annuncio su un sito completamente diverso.
Oggi, questa tecnica pubblicitaria si ottiene principalmente tramite una tecnologia di monitoraggio che utilizza cookie di terze parti per condividere informazioni tra i siti. Si tratta di una tecnologia che Chrome si è impegnata a eliminare gradualmente e a sostituire con varianti più incentrate sulla tutela della privacy.
Chrome sta lavorando al partizionamento
dello spazio di archiviazione, che
suddivide lo spazio di archiviazione del browser per sito. Attualmente, se un iframe di shoes.example
viene incorporato in news.example
e quell'iframe memorizza un valore nello spazio di archiviazione, quel valore può essere letto dal sito shoes.example
. Una volta partizionato lo spazio di archiviazione, gli iframe tra siti non condivideranno più lo spazio di archiviazione, pertanto shoes.example
non potrà accedere alle informazioni memorizzate dall'iframe. Se l'iframe viene pubblicato da *.shoes.example
e incorporato in *.shoes.example
, verrà condiviso lo spazio di archiviazione del browser perché questi sono considerati same-site.
![Un confronto tra lo stato di partizionamento prima e dopo lo spazio di archiviazione.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/a-comparison-before-aft-4902b6c89fcb5.png?authuser=7&hl=it)
Il partizionamento dello spazio di archiviazione verrà applicato alle API di archiviazione standard, tra cui LocalStorage, IndexedDB e i cookie. In un mondo partizionato, la perdita di informazioni nello spazio di archiviazione proprietario diminuirà in modo significativo.
Utilizzare i dati tra siti
I frame protetti sono una funzionalità di Privacy Sandbox che suggerisce ai siti di primo livello di partizionare i dati. Molte proposte e API di 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 con un approccio incentrato sulla tutela della privacy.
- L'archiviazione condivisa consente di accedere a dati tra siti non partizionati in un ambiente sicuro.
Vediamo come potrebbero funzionare i frame protetti con l'API Protected Audience. Con l'API Protected Audience, gli interessi di un utente vengono registrati sul sito di un inserzionista nei gruppi di interesse, insieme agli annunci che potrebbero interessare l'utente. Successivamente, su un sito distinto (noto come "publisher"), gli annunci registrati nei gruppi di interesse pertinenti vengono messi all'asta e l'annuncio vincente viene visualizzato in un frame recintato.
Se il publisher mostra l'annuncio vincente in un iframe e lo script può leggere l'attributo src
dell'iframe, il publisher può dedurre le informazioni sugli interessi del visitatore dall'URL dell'annuncio. Questo approccio non tutela la privacy.
Con un frame recintato, il publisher potrebbe mostrare un annuncio corrispondente agli interessi dei visitatori, ma src
e il gruppo di interesse saranno noti solo all'inserzionista nel frame. Il publisher non è riuscito ad accedere a queste informazioni.
Come funzionano i frame protetti?
I frame protetti utilizzano l'oggetto FencedFrameConfig
per la navigazione. Questo oggetto può essere restituito da un'asta dell'API Protected Audience o da un'operazione di selezione di URL dell'archivio condiviso. A questo punto, l'oggetto di configurazione viene impostato come attributo config
nell'elemento frame isolato. È diverso da un iframe in cui all'attributo src
è assegnato un URL o un'URN opaca. 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 relativo incorporamento. Tuttavia, un frame isolato può utilizzare postMessage
con iframe all'interno del frame isolato.
I frame protetti 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 può accedere al DOM dell'editore. Inoltre, gli attributi come name
, che possono essere impostati su qualsiasi valore e osservato dal publisher, non sono disponibili nei frame protetti.
I frame protetti si comportano come un contesto di navigazione di primo livello (ad esempio una scheda del browser). Anche se un frame isolato in determinati casi d'uso (ad esempio opaque-ads
) può contenere dati cross-site (ad esempio un gruppo di interesse dell'API Protected Audience), il frame non può accedere allo spazio di archiviazione o ai cookie non partizionati. Un frame recintato opaque-ads
può accedere a una partizione di archiviazione e cookie basata su nonce basata su dati univoci.
Le caratteristiche dei frame recintati sono ulteriormente dettagliate nell'spiegazione.
Qual è la differenza tra i frame protetti e gli iframe?
Ora che sai cosa possono fare i frame protetti e cosa no, è utile fare un confronto con le funzionalità degli 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, come name |
Sì | No |
URL (http://example.com ) |
Sì | Sì (in base al caso d'uso) |
Origine opaca gestita dal browser (urn:uuid ) |
No | Sì |
Accesso ai dati cross-site | No | Sì (in base al caso d'uso) |
I frame protetti supportano meno opzioni di comunicazione esterna per tutelare la privacy.
I frame protetti sostituiranno gli iframe?
In definitiva, i frame protetti non sostituiranno gli iframe e non sarà necessario utilizzarli. I frame protetti sono un frame più privato per l'utilizzo quando i dati provenienti da partizioni di primo livello diverse devono essere visualizzati sulla stessa pagina.
Gli iframe dello stesso sito (noti anche come iframe semplici) sono considerati contenuti attendibili.
Utilizza frame protetti
I frame Fenced funzioneranno in combinazione con altre API Privacy Sandbox per visualizzare documenti provenienti da partizioni di spazio di archiviazione diverse all'interno di una singola pagina. Le potenziali API sono attualmente in discussione.
I candidati attuali per questa combinazione includono:
- Dalla famiglia API TURTLEDOVE (che è la base dell'API Protected Audience), i frame protetti potrebbero funzionare con la misurazione dell'impatto sulle conversioni utilizzando lo spazio di archiviazione condiviso.
- Un'altra opzione è consentire la sola lettura dei frame protetti o l'accesso allo spazio di archiviazione non partizionato.
Per ulteriori dettagli, consulta la sezione esplicativa dei casi d'uso di Fenced Frames.
Esempi
Per ottenere un oggetto config
frame recintato, devi passare resolveToConfig: true
alla chiamata runAdAuction()
dell'API Protected Audience o alla chiamata selectURL()
dell'archiviazione condivisa. Se la proprietà non viene aggiunta (o è impostata su false
), la promessa risultante si risolverà 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 });
Dopo aver ottenuto la configurazione, puoi assegnarla all'attributo config
di un frame isolato per passare dal frame alla risorsa rappresentata dal file di configurazione. Le versioni precedenti di Chrome non supportano la proprietà resolveToConfig
, quindi devi comunque confermare che la promessa si è risolta in FencedFrameConfig
prima di procedere:
if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) { const frame = document.createElement('fencedframe'); frame.config = frameConfig; }
Per saperne di più, consulta le spiegazioni su Fenced Frame e Configurazione di Fenced Frame.
Intestazioni
I browser imposteranno Sec-Fetch-Dest: fencedframe
per le richieste effettuate da frame separati e iframe incorporati all'interno di un frame isolato.
Sec-Fetch-Dest: fencedframe
Il server deve impostare l'intestazione della risposta Supports-Loading-Mode: fenced-frame
per caricare un documento in un frame isolato. L'intestazione deve essere presente anche per tutti gli iframe all'interno di un frame isolato.
Supports-Loading-Mode: fenced-frame
Contesto dell'archiviazione condivisa
Puoi utilizzare l'aggregazione privata per generare report sui dati a livello di evento in frame protetti associati a dati contestuali dall'incorporamento. Con il metodo fencedFrameConfig.setSharedStorageContext()
, puoi trasferire alcuni dati contestuali, ad esempio un ID evento, dall'incorporamento ai worklet dello spazio di archiviazione condiviso avviati dall'API Protected Audience.
Nell'esempio seguente, memorizziamo alcuni dati disponibili nella pagina dell'incorporamento e alcuni dati disponibili nel frame isolato nello spazio di archiviazione condiviso. Nella pagina dell'incorporamento, viene impostato un ID evento fittizio come contesto dello spazio di archiviazione condiviso. Dal frame isolato, vengono trasmessi i dati sugli eventi frame.
Dalla pagina dell'incorporamento, puoi impostare i dati contestuali come contesto dello spazio di archiviazione condiviso:
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 trasferire i dati a livello di evento dal frame al worklet dello spazio di archiviazione condiviso (non correlato ai dati contestuali dell'incorporamento 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 l'aggregazione privata:
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 scoprire di più sul contesto dell'incorporamento in un oggetto di configurazione frame isolato, consulta il spiegatore.
Prova frame protetti
Utilizza i flag di Chrome per abilitare l'API Fenced Frame su chrome://flags/#enable-fenced-frames
.
![In Chrome esperimenti, imposta Enabled per il flag denominato Abilita l'elemento Fenced frame](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/in-chrome-experiments-se-46957b7b97eb3.png?authuser=7&hl=it)
La finestra di dialogo contiene più opzioni. Ti consigliamo vivamente di selezionare *Abilita* per consentire a Chrome di eseguire l'aggiornamento automatico alla nuova architettura non appena disponibile.
Le altre opzioni, Abilitato con ShadowDOM e Abilitato con un'architettura di più pagine, offrono diverse strategie di implementazione pertinenti solo per gli ingegneri dei browser. Oggi, Abilita funziona come Abilitato con ShadowDOM. In futuro, l'opzione Abilita verrà impostata su Abilita con l'architettura di più pagine.
Rilevamento delle funzionalità
Per determinare se sono definiti frame protetti:
if (window.HTMLFencedFrameElement) {
// The fenced frame element is defined
}
Per determinare se la configurazione del frame isolato è disponibile:
js
if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) {
// The fenced frame config is available
}
Supporto del browser
L'elemento <fencedframe>
è ancora in modalità sperimentale, quindi è attualmente supportato a partire da Chrome 97. Al momento, non è supportato da altri browser.
Interagisci e condividi feedback
I Fenced Frames sono oggetto di una discussione attiva e sono soggetti a modifiche in futuro. Se provi questa API e vuoi fornire un feedback, ci farebbe piacere conoscere la tua opinione.
- GitHub: leggi l'spiegazione, fai domande e segui la discussione.
- Assistenza per gli sviluppatori: poni domande e partecipa alle discussioni sul repository di Privacy Sandbox per gli sviluppatori.