Spec-Zone.ru › Web APIs

Документ: свойство domain

Устаревшее: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут её всё ещё поддерживать, она может быть уже удалена из соответствующих веб-стандартов, находится в процессе удаления или поддерживается только для совместимости. Избегайте её использования и обновляйте существующий код, если это возможно; см. таблицу совместимости в нижней части этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любой момент.

Свойство domain интерфейса Document получает/устанавливает доменную часть оригина текущего документа, как используется политикой одного происхождения.

Значение

Строка.

Исключения

SecurityError DOMException

Использование этой функции было заблокировано политикой Политики разрешений.

Примеры

Получение домена

Для кода, выполняемого по адресу https://developer.mozilla.org/en-US/docs/Web, этот пример установит currentDomain в строку "developer.mozilla.org".

const currentDomain = document.domain;

Геттер этого свойства возвращает доменную часть происхождения текущего документа. В большинстве случаев это будет часть имени хоста URL документа. Однако есть некоторые исключения:

  • Если страница имеет неявное происхождение, например, для страницы с URL данных, то она вернёт пустую строку.
  • Если document.domain сеттер был использован, то он вернёт установленное значение.

Хотя геттер не так опасен, как сеттер, скорее всего, проще и полезнее использовать свойство Location.hostname вместо него. Тогда можно избежать document.domain полностью:

const currentHostname = location.hostname;

Для URL https://developer.mozilla.org/en-US/docs/Web, currentHostname также является строкой "developer.mozilla.org". Другие альтернативы, предоставляющие немного другую информацию, это Location.host, включающая порт, и Window.origin, которая предоставляет полное происхождение.

Установка домена

document.domain = domainString;

Сеттер этого свойства может быть использован для изменения происхождения страницы, а, следовательно, для модификации поведения определённых проверок безопасности. Он может быть установлен только на тот же или родительский домен. Например, если https://a.example.com и https://b.example.com оба используют

document.domain = "example.com";

то они оба изменили своё происхождение, чтобы иметь один домен, и теперь могут напрямую получить доступ к DOM друг друга — несмотря на то, что они находятся на разных источниках, что обычно предотвращает такой доступ.

Обратите внимание, что установка document.domain в его текущее значение не является операцией без действия. Это всё равно изменяет происхождение. Например, если одна страница устанавливает

document.domain = document.domain;

то она будет считаться источником другого происхождения со всеми другими обычными страницами с тем же происхождением, которые не сделали того же.

Устаревание

Сеттер document.domain устарел. Он подрывает защитные меры, предоставляемые политикой одного происхождения, и усложняет модель происхождения в браузерах, что приводит к проблемам межбраузерной совместимости и ошибкам безопасности.

Попытка установить document.domain опасна. Она открывает полный доступ к DOM страницы всех поддоменов, что, вероятно, не является предполагаемым действием. Она также удаляет компонент порта из происхождения, поэтому теперь к вашей странице может получить доступ другая страница с тем же IP-адресом или той же частью хоста, даже на другом порту.

Это особенно небезопасно на совместном хостинге. Например, другой клиент совместного хостинга может разместить сайт по тому же IP-адресу, но на другом порту, а затем установка document.domain удалит защиту одного происхождения, которая обычно защищает вас от доступа данных вашего сайта другим клиентом.

Аналогичные проблемы возникают на сайтах совместного хостинга, которые предоставляют каждому клиенту отдельный поддомен. Если сайт устанавливает document.domain, любой другой клиент на другом поддомене теперь может сделать то же самое и начать получать доступ к данным исходного сайта.

Вместо использования document.domain для облегчения междоменного взаимодействия следует использовать Window.postMessage для отправки асинхронного сообщения в другой источник. Этот контролируемый доступ через обмен сообщениями гораздо безопаснее, чем открытое предоставление всех данных, вызванное document.domain.

Неудачи

Сеттер выбросит SecurityError DOMException в нескольких случаях:

  • Политика document-domain Permissions-Policy отключена.
  • Документ находится внутри изолированного <iframe>.
  • Документ не имеет контекста просмотра.
  • Эффективный домен документа null.
  • Заданное значение не совпадает с текущим именем хоста страницы, ни с родительским доменом.

В качестве примера последнего случая неудачи, попытка установить document.domain на "example.org" при использовании https://example.com/ вызовет ошибку.

Кроме того, в качестве части устаревания, она ничего не делает, когда сочетается с определёнными современными функциями изоляции:

  • Если используется на странице, изолированной с разных источников, т.е. той, которая использует соответствующие значения для Cross-Origin-Opener-Policy и Cross-Origin-Embedder-Policy HTTP-заголовков
  • Если используется на странице, изолированной по происхождению, т.е. той, которая использует Origin-Agent-Cluster Экспериментальный HTTP-заголовок

Наконец, установка document.domain не изменяет происхождение, используемое для проверок происхождения некоторыми веб-API, что предотвращает доступ к поддоменам через этот механизм. Влияющие API включают (но не ограничиваются): Window.localStorage, API IndexDB, BroadcastChannel, SharedWorker.

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

Спецификация
HTML
# relaxing-the-same-origin-restriction

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

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
domain
1С Chrome 115 установка domain не имеет эффекта, если сайт не включил кластеры агентов с ключами происхождения.
12
69С Firefox 62, если домен не может быть идентифицирован, domain возвращает пустую строку вместо null. См. ошибку 819475.
1–69Поддерживается только для HTMLDocument, а не для всех Document объектов.
≤12.1 1
18С Chrome Android 115 установка domain не имеет эффекта, если сайт не включил кластеры агентов с ключами происхождения.
79С Firefox для Android 62, если домен не может быть идентифицирован, domain возвращает пустую строку вместо null. См. ошибку 819475.
4–79Поддерживается только для HTMLDocument, а не для всех Document объектов.
≤12.1 1
1.0С Samsung Internet 23.0 установка domain не имеет эффекта, если сайт не включил кластеры агентов с ключами происхождения.
4.4С WebView Android 115 установка domain не имеет эффекта, если сайт не включил кластеры агентов с ключами происхождения.

См. также

  • Политика одного происхождения
  • Location.hostname
  • Location.host
  • Window.origin

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Document/domain

Spec-Zone.ru

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