Анонимное испытание происхождения iframe: легко встраивать iframe в среды COEP

Артур Сонцогни
Arthur Sonzogni

Разработчики, использующие COEP, теперь могут встраивать сторонние iframe, которые сами не используют COEP.

Зачем нам нужен COEP

Некоторые веб-API повышают риск атак по побочным каналам, например Spectre . Чтобы снизить этот риск, браузеры предлагают изолированную среду на основе согласия, называемую изоляцией между источниками , которая, среди прочего, требует развертывания COEP. Это позволяет веб-сайтам использовать привилегированные функции, включая SharedArrayBuffer , performance.measureUserAgentSpecificMemory() и высокоточные таймеры с лучшим разрешением .

Чтобы включить изоляцию между источниками, веб-сайты должны отправлять следующие два HTTP-заголовка:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

Проблемы с включением COEP

Хотя изоляция между источниками повышает безопасность веб-страниц и дает возможность использовать мощные функции, развертывание COEP может оказаться затруднительным . Одна из самых больших проблем заключается в том, что все iframe с перекрестным происхождением также должны развертывать COEP и CORP. Iframe без этих заголовков не будут загружаться браузером.

iframe обычно обслуживаются третьей стороной, для которой может быть непросто развернуть COEP.

Анонимный iframe спешит на помощь

Вот тут-то и появляется анонимный iframe. При добавлении anonymous атрибута к элементу <iframe> iframe загружается из другого, эфемерного раздела хранилища, и на него больше не распространяются ограничения COEP.

Пример:

<iframe anonymous src="https://example.com">

Iframe создается в новом эфемерном контексте и не имеет доступа ни к одному из файлов cookie, связанных с веб-сайтом верхнего уровня. Все начинается с пустой банки из-под печенья. Аналогичным образом API-интерфейсы хранилища, такие как LocalStorage , CacheStorage , IndexedDB и т. д., загружают и сохраняют данные в новом эфемерном разделе. Область действия раздела ограничена текущим документом верхнего уровня и источником iframe. Хранилище будет очищено после выгрузки документа верхнего уровня.

Анонимные iframe не подпадают под действие правил встраивания COEP. Это по-прежнему безопасно, поскольку они каждый раз загружаются из нового пустого контекста. Они будут загружены без персонализации данных. Они содержат только общедоступные данные, которые не представляют ценности для злоумышленника.

Демо

Вы можете проверить анонимный iframe по адресу: https://anonymous-iframe.glitch.me/

Зарегистрируйтесь для участия в пробной версии Origin

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

Зарегистрируйтесь для участия в пробной версии Origin, чтобы ваш сайт мог использовать анонимные iframe:

  1. Запросите токен для вашего происхождения.
  2. Используйте токен одним из следующих способов:
    • В вашем HTML: html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
    • В вашем Javascript: js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
    • В заголовках HTTP: text Origin-Trial: TOKEN_GOES_HERE
  3. Добавьте анонимный iframe на свою страницу: html <iframe anonymous src="https://example.com">

Если у вас есть отзывы об этой функции, сообщите о проблеме в репозитории GitHub .

Испытание происхождения третьей стороны

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

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

Часто задаваемые вопросы

Будет ли эта функция принята другими браузерами?

Являются ли iframe, вложенные внутри <iframe anonymous> анонимными?

Да. Это наследуется. Если iframe является анонимным, это применяется ко всем iframe во всем поддереве, даже без anonymous атрибута.

Всплывающие окна, созданные с помощью <iframe anonymous> тоже анонимны?

Всплывающие окна открываются так, как если бы был установлен noopener . Они создаются из нового обычного контекста верхнего уровня и не являются анонимными. Они не могут общаться с анонимным iframe.

Ресурсы