Panoramica dei frame protetti

Incorpora in modo sicuro i contenuti in una pagina senza condividere dati tra siti.

Stato implementazione

Questo documento illustra un nuovo elemento HTML: <fencedframe>.

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.

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
I contenuti incorporati possono accedere al DOM del contesto di incorporamento No
Il contesto di incorporamento può accedere al DOM dei contenuti incorporati No
Attributi osservabili, come name No
URL (http://example.com) Sì (in base al caso d'uso)
Origine opaca gestita dal browser (urn:uuid) No
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:

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.

Ottieni la configurazione del frame isolato dall'asta dell'API Protected Audience
const frameConfig = await navigator.runAdAuction({
  // ...auction configuration
  resolveToConfig: true
});
Ottieni la configurazione dei frame separati dalla selezione dell'URL dello spazio di archiviazione condiviso
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:

Imposta la configurazione sull'attributo frame recintato
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.sendHistogramReport({
      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&#39;elemento Fenced frame

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.

Scopri di più