Разработчики, использующие 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 без учетных данных .
Часто задаваемые вопросы
Будет ли эта функция принята другими браузерами?
- Mozilla Запрос позиции: Ожидается
- Webkit Запрос позиции: нет сигнала
- W3C TAG Запрос на позицию: удовлетворено
Является ли <iframe>
вложенным в <iframe credentialless>
без учетных данных?
Да. Это наследуется. Если iframe не имеет учетных данных, это применяется ко всем iframe во всем поддереве, даже без атрибута credentialless
.
Создаются ли всплывающие окна из <iframe credentialless>
также без учетных данных?
Всплывающие окна открываются так, как если бы был установлен noopener
. Они создаются в новом обычном контексте верхнего уровня и не требуют учетных данных. Они не могут общаться с iframe без учетных данных.
Как определить, что документ был встроен в iframe без учетных данных?
window.credentialless
имеет значение true внутри iframe без учетных данных и false в противном случае. Его значение undefined
в веб-браузере, который не поддерживает <iframe credentialless>
.
Ресурсы
- Сделайте ваш сайт «изолированным от перекрестного происхождения» с помощью COOP и COEP.
- Почему вам нужна «изолированная перекрестная версия» для мощных функций
- Руководство по включению изоляции между источниками
- Обновления SharedArrayBuffer в Android Chrome 88 и Desktop Chrome 92
- Загрузка ресурсов из разных источников без заголовков CORP с помощью
COEP: credentialless
- IFrame без учетных данных - Веб-безопасность | МДН