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 | Нет |
См. также
© 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