Разработчики, использующие 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:
- Запросите токен для вашего происхождения.
- Используйте токен одним из следующих способов:
- В вашем 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
- В вашем HTML:
- Добавьте анонимный iframe на свою страницу:
html <iframe anonymous src="https://example.com">
Если у вас есть отзывы об этой функции, сообщите о проблеме в репозитории GitHub .
Испытание происхождения третьей стороны
Пробная версия Origin также доступна для сторонних скриптов. Это означает, что его можно включить с помощью скриптов, встроенных в страницу.
Леран подробнее о том, как зарегистрироваться для участия в пробной версии стороннего источника .
Часто задаваемые вопросы
Будет ли эта функция принята другими браузерами?
- Mozilla Запрос позиции: Ожидается
- Webkit Запрос позиции: нет сигнала
- W3C TAG Запрос на позицию: удовлетворено
Являются ли iframe, вложенные внутри <iframe anonymous>
анонимными?
Да. Это наследуется. Если iframe является анонимным, это применяется ко всем iframe во всем поддереве, даже без anonymous
атрибута.
Всплывающие окна, созданные с помощью <iframe anonymous>
тоже анонимны?
Всплывающие окна открываются так, как если бы был установлен noopener
. Они создаются из нового обычного контекста верхнего уровня и не являются анонимными. Они не могут общаться с анонимным iframe.
Ресурсы
- Сделайте ваш сайт «изолированным от перекрестного происхождения» с помощью COOP и COEP.
- Почему вам нужна «изолированная перекрестная версия» для мощных функций
- Руководство по включению изоляции между источниками
- Обновления SharedArrayBuffer в Android Chrome 88 и Desktop Chrome 92
- Загрузка ресурсов из разных источников без заголовков CORP с помощью
COEP: credentialless