Spec-Zone.ru › HTTP

IFrame без учетных данных

IFrame без учетных данных

Ограниченная доступность

Эта функция не входит в Baseline, поскольку не работает в некоторых наиболее широко используемых браузерах.

Хотите, чтобы эта функция поддерживалась шире? Расскажите нам почему.

  • Подробнее
  • Полная таблица совместимости
>

Экспериментальная функция: Это экспериментальная технология
Перед использованием в рабочей среде внимательно изучите таблицу совместимости с браузерами.

IFrame без учетных данных предоставляет разработчикам механизм загрузки сторонних ресурсов в элементах <iframe> с использованием нового временного контекста. У него нет доступа к сети, файлам cookie и данным хранилища его обычного источника. Он использует новый контекст, существующий в течение срока жизни документа верхнего уровня. Взамен можно не применять правила встраивания Cross-Origin-Embedder-Policy (COEP), поэтому документы с установленным COEP могут встраивать сторонние документы, в которых он не установлен.

Проблема

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

Чтобы включить изоляцию от источников разного происхождения, ресурс должен передаваться с заголовком Cross-Origin-Opener-Policy со значением same-origin (защищает ваш источник от злоумышленников) и заголовком Cross-Origin-Embedder-Policy со значением credentialless или require-corp (защищает жертв от вашего источника). Последний запрещает документу загружать любые междоменные ресурсы с учетными данными, если они явно не предоставили документу разрешение с помощью Cross-Origin-Resource-Policy или совместного использования ресурсов между источниками.

Основная проблема, ограничивающая распространение изоляции от источников разного происхождения, заключается в том, что Cross-Origin-Embedder-Policy применяется рекурсивно: любой сторонний контент, загружаемый в элементы <iframe> документа с установленным Cross-Origin-Embedder-Policy, также должен использовать Cross-Origin-Embedder-Policy, чтобы встраивание прошло успешно. Это создает проблему для разработчиков, встраивающих в свои приложения сторонний контент (например, контент рекламных сетей), поскольку обычно они не могут им управлять. До сих пор им оставалось только ждать, пока поставщики стороннего контента реализуют Cross-Origin-Embedder-Policy.

Эту проблему решает IFrame без учетных данных.

Решение — IFrame без учетных данных

Элемент <iframe> работает без учетных данных, если применить к нему атрибут credentialless или установить эквивалентное свойство DOM — HTMLIFrameElement.credentialless — в значение true.

<iframe
  src="https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)"
  title="Spectre vulnerability Wikipedia page"
  width="960"
  height="600"
  credentialless></iframe>

Или:

<iframe width="960" height="600"> </iframe>
const iframeElem = document.querySelector("iframe");

iframeElem.credentialless = true;
iframeElem.title = "Spectre vulnerability Wikipedia page";
iframeElem.src =
  "https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)";

Примечание: Встроенный в <iframe> документ может проверить свойство window.credentialless, чтобы узнать, выполняется ли он в контексте без учетных данных. Значение true означает, что встраивающий <iframe> работает без учетных данных.

В результате документы внутри <iframe>, работающего без учетных данных, загружаются в новых временных контекстах. Эти контексты не имеют доступа к данным, связанным с их источниками, например к файлам cookie и localStorage. Хранилище без учетных данных выделяется отдельно, а ключи хранилища изменяются с помощью значения nonce («число, используемое один раз»), задаваемого один раз для каждого документа верхнего уровня. Поэтому файл cookie, установленный в одном <iframe> без учетных данных, будет доступен только из других одноисточниковых <iframe> без учетных данных, встроенных в тот же документ верхнего уровня.

Значение nonce является общим для всех iframe без учетных данных, являющихся потомками одного и того же документа верхнего уровня, но отличается для каждого отдельного документа верхнего уровня, на который переходит пользователь, и становится недоступным после перехода пользователя с этой страницы. IFrame без учетных данных не используют общее хранилище на разных страницах. Возвращаясь к упомянутому выше файлу cookie: при повторной загрузке документа <iframe> без учетных данных будут загружены в другом контексте, поэтому ранее установленные файлы cookie будут недоступны.

Кроме того:

  • Всплывающие окна, открытые iframe без учетных данных, открываются с установленным атрибутом rel="noopener". Поэтому использовать всплывающие окна OAuth в iframe без учетных данных нельзя.
  • Автозаполнение браузера и функции менеджеров паролей недоступны в <iframe> без учетных данных.

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

Рекурсивный режим без учетных данных во вложенных IFrame

Если для <iframe> установлен параметр credentialless, а в загруженном внутри него документе есть вложенные <iframe>, эти дочерние <iframe> наследуют настройку режима без учетных данных.

Спецификации

Спецификация
Iframe без учетных данных>

Совместимость с браузерами

Настольные компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari для iOS Samsung Internet WebView для Android WebView для iOS
IFrame_credentialless 110 110 Нет 96 Нет 110 Нет 74 Нет 21.0 110 Нет

См. также

  • Cross-Origin-Opener-Policy
  • Cross-Origin-Embedder-Policy
  • Cross-Origin-Resource-Policy
  • Совместное использование ресурсов между источниками
  • Атрибут <iframe> credentialless
  • HTMLIFrameElement.credentialless

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/IFrame_credentialless

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API