Iframe без учетных данных: легко встраивайте iframe в среды COEP.

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

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

Без учетных данных iframe включен по умолчанию в Chrome версии 110. Он решает наиболее распространенную проблему, с которой сталкиваются разработчики, работающие с Cross-Origin-Embedder-Policy (COEP) : встраивание сторонних iframe, которые не устанавливают COEP.

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

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

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

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

COEP:credentialless также можно использовать в качестве альтернативы require-corp . Дополнительную информацию см. в документации .

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

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

Iframe без учетных данных спешит на помощь

Мы представляем <iframe credentialless> чтобы облегчить встраивание сторонних iframe, для которых не установлен COEP. Добавляя атрибут credentialless к элементу <iframe> , iframe загружается из другого, пустого контекста. В частности, он загружается без файлов cookie. Это позволяет снять ограничение COEP.

Пример:

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

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

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

Демо

Вы можете посмотреть демо-версию iframe без учетных данных .

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

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

Является ли <iframe> вложенным в <iframe credentialless> без учетных данных?

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

Создаются ли всплывающие окна из <iframe credentialless> также без учетных данных?

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

Как определить, что документ был встроен в iframe без учетных данных?

window.credentialless имеет значение true внутри iframe без учетных данных и false в противном случае. Его значение undefined в веб-браузере, который не поддерживает <iframe credentialless> .

Ресурсы