Обзор огороженных рамок

Безопасно встраивайте контент на страницу без передачи межсайтовых данных.

Статус реализации

В этом документе описывается новый элемент HTML: <fencedframe> .

Предложение Статус
Изменения веб-API для конфигурации урны
Объяснитель
Доступно в Chrome в первом квартале 2023 года.
Креативные макросы в изолированных фреймах для отчетов по рекламе (FFAR)
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Отправить автоматические маяки один раз
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Конфигурации сериализуемых изолированных фреймов
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Дополнительный параметр формата для макросов размера объявления для защищенной аудитории
Проблема с GitHub
Доступно в Chrome в четвертом квартале 2023 года.
Автоматическая отправка маяков на все зарегистрированные URL-адреса
Проблема на GitHub | Проблема с GitHub
Доступно в Chrome в четвертом квартале 2023 года.
Включить выход из групп интересов объявлений из iFrames Urn и фреймов компонентов объявлений.
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Введите зарезервированный.top_navigation_start/commit
Проблема с GitHub , проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Не отключайте настройку файлов cookie в ReportEvent до 3PCD
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Добавить поддержку автоматических маяков в подкадрах с перекрестным происхождением.
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Разрешить подфреймам перекрестного происхождения отправлять маяки reportEvent()
Проблема с GitHub
Доступно в Chrome во втором квартале 2024 г.
Заголовок Referer в маяках
Проблема с GitHub
Доступно в Chrome в первом квартале 2025 г.
Автоматическая поддержка данных маяка из разных источников
Проблема с GitHub
Ожидается в Chrome во втором квартале 2025 года.
,
Предложение Статус
Изменения веб-API для конфигурации урны
Объяснитель
Доступно в Chrome в первом квартале 2023 года.
Креативные макросы в изолированных фреймах для отчетов по рекламе (FFAR)
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Отправить автоматические маяки один раз
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Конфигурации сериализуемых изолированных фреймов
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Дополнительный параметр формата для макросов размера объявления для защищенной аудитории
Проблема с GitHub
Доступно в Chrome в четвертом квартале 2023 года.
Автоматическая отправка маяков на все зарегистрированные URL-адреса
Проблема на GitHub | Проблема с GitHub
Доступно в Chrome в четвертом квартале 2023 года.
Включить выход из групп интересов объявлений из iFrames Urn и фреймов компонентов объявлений.
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Введите зарезервированный.top_navigation_start/commit
Проблема с GitHub , проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Не отключайте настройку файлов cookie в ReportEvent до 3PCD
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Добавить поддержку автоматических маяков в подкадрах с перекрестным происхождением.
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Разрешить подфреймам перекрестного происхождения отправлять маяки reportEvent()
Проблема с GitHub
Доступно в Chrome во втором квартале 2024 г.
Заголовок Referer в маяках
Проблема с GitHub
Доступно в Chrome в первом квартале 2025 г.
Автоматическая поддержка данных маяка из разных источников
Проблема с GitHub
Ожидается в Chrome во втором квартале 2025 года.
,
Предложение Статус
Изменения веб-API для конфигурации урны
Объяснитель
Доступно в Chrome в первом квартале 2023 года.
Креативные макросы в изолированных фреймах для отчетов по рекламе (FFAR)
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Отправить автоматические маяки один раз
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Конфигурации сериализуемых изолированных фреймов
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Дополнительный параметр формата для макросов размера объявления для защищенной аудитории
Проблема с GitHub
Доступно в Chrome в четвертом квартале 2023 года.
Автоматическая отправка маяков на все зарегистрированные URL-адреса
Проблема на GitHub | Проблема с GitHub
Доступно в Chrome в четвертом квартале 2023 года.
Включить выход из групп интересов объявлений из iFrames Urn и фреймов компонентов объявлений.
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Введите зарезервированный.top_navigation_start/commit
Проблема с GitHub , проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Не отключайте настройку файлов cookie в ReportEvent до 3PCD
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Добавить поддержку автоматических маяков в подкадрах с перекрестным происхождением.
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Разрешить подфреймам перекрестного происхождения отправлять маяки reportEvent()
Проблема с GitHub
Доступно в Chrome во втором квартале 2024 г.
Заголовок Referer в маяках
Проблема с GitHub
Доступно в Chrome в первом квартале 2025 г.
Автоматическая поддержка данных маяка из разных источников
Проблема с GitHub
Ожидается в Chrome во втором квартале 2025 года.
,
Предложение Статус
Изменения веб-API для конфигурации урны
Объяснитель
Доступно в Chrome в первом квартале 2023 года.
Креативные макросы в изолированных фреймах для отчетов по рекламе (FFAR)
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Отправить автоматические маяки один раз
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Конфигурации сериализуемых изолированных фреймов
Проблема с GitHub
Доступно в Chrome в третьем квартале 2023 года.
Дополнительный параметр формата для макросов размера объявления для защищенной аудитории
Проблема с GitHub
Доступно в Chrome в четвертом квартале 2023 года.
Автоматическая отправка маяков на все зарегистрированные URL-адреса
Проблема на GitHub | Проблема с GitHub
Доступно в Chrome в четвертом квартале 2023 года.
Включить выход из групп интересов объявлений из iFrames Urn и фреймов компонентов объявлений.
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Введите зарезервированный.top_navigation_start/commit
Проблема с GitHub , проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Не отключайте настройку файлов cookie в ReportEvent до 3PCD
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Добавить поддержку автоматических маяков в подкадрах с перекрестным происхождением.
Проблема с GitHub
Доступно в Chrome в первом квартале 2024 г.
Разрешить подфреймам перекрестного происхождения отправлять маяки reportEvent()
Проблема с GitHub
Доступно в Chrome во втором квартале 2024 г.
Заголовок Referer в маяках
Проблема с GitHub
Доступно в Chrome в первом квартале 2025 г.
Автоматическая поддержка данных маяка из разных источников
Проблема с GitHub
Ожидается в Chrome во втором квартале 2025 года.

Зачем нужны огороженные рамы?

Огороженный фрейм ( <fencedframe> ) — это HTML-элемент для встроенного содержимого, аналогичный iframe. В отличие от iframe, ограждённый фрейм ограничивает взаимодействие с контекстом внедрения, позволяя фрейму получать доступ к межсайтовым данным без их передачи контексту внедрения. Некоторые API Privacy Sandbox могут требовать отображения определённых документов внутри ограждённого фрейма .

Аналогично, любые основные данные в контексте внедрения не могут быть переданы защищенному фрейму.

Например, если news.example (контекст внедрения) встраивает рекламу из shoes.example в огражденный фрейм, news.example не может извлечь данные из рекламы shoes.example , а shoes.example не может получить собственные данные из news.example .

Укрепите межсайтовую конфиденциальность с помощью разбиения хранилища на разделы

Просматривая веб-страницы, вы, вероятно, просматривали товары на одном сайте, а затем снова видели их в рекламе на совершенно другом сайте.

Сегодня этот метод рекламы реализуется в первую очередь за счет технологии отслеживания, которая использует сторонние файлы cookie для обмена информацией между сайтами.

Chrome работает над секционированием хранилища , которое разделяет хранилище браузера по сайтам. Без секционирования, если iframe из shoes.example встроен в news.example и этот iframe сохраняет значение в хранилище, то это значение можно прочитать с сайта shoes.example . После секционирования хранилища межсайтовые iframe больше не будут использовать хранилище совместно, поэтому shoes.example не сможет получить доступ к информации, хранящейся в iframe. Если iframe обслуживается из *.shoes.example и встроен в *.shoes.example , хранилище браузера будет общим, поскольку они считаются одним сайтом .

Сравнение состояния хранилища до и после разбиения на разделы.

Разделение хранилища будет применяться к стандартным API хранилищ, включая LocalStorage, IndexedDB и файлы cookie. В мире секционирования утечка информации через собственные хранилища будет значительно снижена.

Работа с межсайтовыми данными

Огражденные фреймы — это функция Privacy Sandbox , которая предполагает, что сайты верхнего уровня должны разделять данные. Многие предложения Privacy Sandbox и API направлены на удовлетворение потребностей в кросс-сайтовом использовании без сторонних файлов cookie или других механизмов отслеживания. Например:

Защищённые фреймы разработаны для работы с API защищенной аудитории . С помощью API защищенной аудитории интересы пользователя регистрируются на сайте рекламодателя в группах интересов , а также объявления, которые могут быть интересны пользователю. Затем на отдельном сайте (известном как «издатель») объявления, зарегистрированные в соответствующих группах интересов, выставляются на аукцион, и победившее объявление отображается в защищённом фрейме.

Если издатель отображает победившую рекламу в iframe, и скрипт может прочитать атрибут src этого iframe, издатель может сделать вывод об интересах посетителя из URL-адреса этой рекламы. Это не гарантирует конфиденциальность.

Используя фрейм, издатель может показывать рекламу, соответствующую интересам посетителей, но src и группа интересов будут известны только рекламодателю, находящемуся в фрейме. Издатель не может получить доступ к этой информации.

Как работают огражденные рамы?

Ограждённые фреймы используют объект FencedFrameConfig для навигации. Этот объект может быть возвращён из аукциона API Protected Audience или операции выбора URL в Shared Storage. Затем объект config устанавливается в качестве атрибута config элемента ограждённого фрейма. Это отличается от iframe, где URL или непрозрачный URN назначается атрибуту src . Объект FencedFrameConfig имеет свойство url доступное только для чтения; однако, поскольку текущие сценарии использования требуют скрытия фактического URL внутреннего ресурса, это свойство возвращает строку opaque при чтении.

Огороженный фрейм не может использовать postMessage для взаимодействия со своим встроенным компонентом. Однако он может использовать postMessage с элементами iframe внутри себя.

Огороженные фреймы будут изолированы от издателя другими способами. Например, издатель не будет иметь доступа к DOM внутри огороженного фрейма, а огороженный фрейм не сможет получить доступ к DOM издателя. Более того, такие атрибуты, как name , которому издатель может присвоить любое значение и наблюдать за ним, недоступны в огороженных фреймах.

Ограждённые фреймы ведут себя как контекст браузера верхнего уровня (например, вкладка браузера). Хотя в определённых случаях использования (например, для рекламы с ретаргетингом на основе интересов) огороженный фрейм может содержать межсайтовые данные (например, группу интересов API Protected Audience), он не может получить доступ к неразделённому хранилищу или файлам cookie. Ограждённый фрейм может получить доступ к уникальному разделу хранилища и файлам cookie на основе одноразовых кодов.

Характеристики огражденных рам более подробно описаны в пояснительной записке .

Чем огражденные фреймы отличаются от iframes?

Теперь, когда вы знаете, что могут и чего не могут делать огороженные фреймы, будет полезно сравнить их с существующими функциями iframe.

Особенность iframe fencedframe
Встроить контент Да Да
Встроенный контент может получить доступ к встроенному контексту DOM Да Нет
Встраиваемый контекст может получить доступ к встроенному содержимому DOM Да Нет
Наблюдаемые атрибуты, такие как name Да Нет
URL-адреса ( http://example.com ) Да Да ( зависит от варианта использования )
Непрозрачный источник, управляемый браузером ( urn:uuid ) Нет Да (зависит от варианта использования)
Доступ к межсайтовым данным Нет Да (зависит от варианта использования)

Огороженные рамы предусматривают меньше внешних вариантов коммуникации для сохранения конфиденциальности.

Заменят ли фреймы огражденные фреймы фреймы?

В конечном счёте, огороженные фреймы не заменят iframe, и вам не придётся их использовать. Огороженные фреймы — это более приватный вариант, который можно использовать, когда данные из разных разделов верхнего уровня должны отображаться на одной странице.

Фреймы того же сайта (иногда называемые дружественными фреймами) считаются доверенным контентом.

Используйте огороженные рамы

Ограждённые фреймы будут работать в сочетании с другими API Privacy Sandbox для отображения документов из разных разделов хранилища на одной странице. Возможные API находятся в стадии обсуждения.

В настоящее время кандидатами на эту комбинацию являются:

Более подробную информацию см. в описании вариантов использования огражденных рам .

Примеры

Чтобы получить объект config огороженного фрейма, необходимо передать resolveToConfig: true в вызов runAdAuction() API защищенной аудитории или в вызов selectURL() общего хранилища. Если свойство не добавлено (или ему присвоено значение false ), полученное обещание будет преобразовано в URN, который можно использовать только в iframe.

Получите конфигурацию огражденного кадра с аукциона API Protected Audience
const frameConfig = await navigator.runAdAuction({
  // ...auction configuration
  resolveToConfig: true
});
Получить конфигурацию огражденного фрейма из выбора URL-адреса общего хранилища
const frameConfig = await sharedStorage.selectURL('operation-name', {
  resolveToConfig: true
});

Получив конфигурацию, вы можете назначить её атрибуту config фрейма, чтобы переместить фрейм к ресурсу, представленному этой конфигурацией. Более ранние версии Chrome не поддерживают свойство resolveToConfig , поэтому перед навигацией необходимо убедиться, что обещание преобразовано в FencedFrameConfig :

Установите конфигурацию для атрибута огороженной рамки
if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) {
  const frame = document.createElement('fencedframe');
  frame.config = frameConfig;
}

Более подробную информацию см. в разделах «Огражденная рама» и «Конфигурация огражденной рамы» .

Заголовки

Браузеры установят Sec-Fetch-Dest: fencedframe для запросов, сделанных из огражденных фреймов и встроенных в огражденный фрейм iframes.

Sec-Fetch-Dest: fencedframe

Для загрузки документа в огороженном фрейме сервер должен установить заголовок ответа Supports-Loading-Mode: fenced-frame . Этот заголовок также должен присутствовать для всех элементов iframe внутри огороженного фрейма.

Supports-Loading-Mode: fenced-frame

Контекст общего хранилища

Вы можете использовать частную агрегацию для передачи данных на уровне событий в изолированных фреймах, связанных с контекстными данными из встраиваемого модуля. Используя метод fencedFrameConfig.setSharedStorageContext() , вы можете передавать некоторые контекстные данные, например идентификатор события, из встраиваемого модуля в рабочие программы общего хранилища, инициированные API защищенной аудитории.

В следующем примере мы сохраняем часть данных, доступных на странице встраивания, и часть данных, доступных в изолированном фрейме, в общем хранилище. На странице встраивания в качестве контекста общего хранилища задаётся фиктивный идентификатор события. Из изолированного фрейма передаются данные о событиях фрейма.

На странице встраивания вы можете задать контекстные данные в качестве общего контекста хранилища:

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;

Из огражденного фрейма вы можете передавать данные уровня событий из фрейма в ворклет общего хранилища (не связанный с контекстными данными из описанного выше средства внедрения):

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
  },
});

Вы можете прочитать контекстную информацию встраиваемого устройства из sharedStorage.context и данные уровня событий фрейма из объекта data , а затем сообщить их через частную агрегацию:

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);

Дополнительную информацию о контексте встраиваемого модуля в объекте конфигурации огражденного кадра см. в пояснительной записке .

Попробуйте огороженные рамы

Используйте флаги Chrome для включения API Fenced Frame по адресу chrome://flags/#enable-fenced-frames .

В Chrome Experiments установите значение Enabled для флага с именем Enable the Fenced frame element.

В диалоговом окне есть несколько вариантов выбора. Мы настоятельно рекомендуем выбрать « Включить », чтобы Chrome автоматически обновлялся до новой архитектуры по мере её появления.

Другие варианты, «Enabled with ShadowDOM» и «Enabled with multi-page architecture» , предлагают различные стратегии реализации, которые актуальны только для разработчиков браузеров. В настоящее время «Enabled» работает так же, как «Enabled with ShadowDOM» . В будущем «Enable» будет соответствовать «Enable with multi-page architecture» .

Обнаружение особенностей

Чтобы определить, определены ли огражденные рамы:

if (window.HTMLFencedFrameElement) {
  // The fenced frame element is defined
}

Чтобы определить, доступна ли конфигурация огражденной рамы:

if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) {
   // The fenced frame config is available
}

Поддержка браузеров

Привлекайте и делитесь отзывами

Огражденные рамы находятся в стадии активного обсуждения и могут быть изменены в будущем. Если вы попробуете этот API и у вас есть отзывы, мы будем рады их услышать.

Узнать больше