Spec-Zone.ru › HTTP

Политика разрешений

Политика разрешений

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

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

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

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

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

Политика разрешений предоставляет веб-разработчикам механизмы для явного указания того, какие функции можно и нельзя использовать на веб-сайте. Вы определяете набор «политик», ограничивающих доступ кода сайта к API или изменяющих поведение браузера по умолчанию для определённых функций. Это позволяет применять лучшие практики даже по мере развития кодовой базы, а также безопаснее встраивать сторонний контент.

Политика разрешений похожа на политику безопасности содержимого, но управляет функциями, а не поведением системы безопасности.

Примеры того, что можно делать с помощью политики разрешений:

  • Изменять поведение автовоспроизведения по умолчанию на мобильных устройствах и для сторонних видео.
  • Ограничивать использование сайтом чувствительных устройств, таких как камера, микрофон или динамики.
  • Разрешать iframe использовать API полноэкранного режима.
  • Запрещать выполнение скриптов для элементов, которые не видны в области просмотра, чтобы повысить производительность.

Примечание: Раньше политика разрешений называлась Feature Policy. Изменилось не только название, но и синтаксис HTTP-заголовка. Имейте это в виду, если раньше вы использовали Feature Policy, и проверьте таблицы поддержки браузерами. Синтаксис <iframe allow=" ... "> остался прежним.

Основные понятия и использование

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

К возможным подходам относятся:

  • Для JavaScript API, которым требуется разрешение пользователя, возвращается сообщение «В доступе отказано».
  • JavaScript API, предоставляющие доступ к функциям, возвращают значения false или вызывают ошибку.
  • API вообще не предоставляются, как будто их не существует.
  • Параметры, управляющие поведением функции, имеют другие значения по умолчанию.

Примечание: У новых функций может быть специальный API для передачи сведений о состоянии. В существующих функциях, в которые позже добавляется поддержка политики разрешений, обычно используются уже имеющиеся механизмы.

Политика разрешений позволяет управлять тем, какие источники могут использовать те или иные функции как на странице верхнего уровня, так и во встроенных <iframe>. Цель — обеспечить соблюдение лучших практик для удобства пользователей и предоставить детальный контроль над чувствительными или мощными функциями (то есть функциями, для использования которых пользователь должен явно дать разрешение до выполнения соответствующего кода).

Политика разрешений позволяет задавать политики двумя способами:

  • HTTP-заголовок Permissions-Policy позволяет управлять использованием функций в полученных ответах и во всём встроенном на страницу контенте (в том числе в <iframe>).
  • Атрибут <iframe> allow позволяет управлять использованием функций только в определённых <iframe>.

Эти способы независимы, но связаны между собой — подробности см. в разделе Наследование политик встроенным контентом.

Примечание: Скрипты могут программно получать сведения о политике разрешений через объект FeaturePolicy, доступный через Document.featurePolicy или HTMLIFrameElement.featurePolicy.

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

  • Директива, задающая имя функции, которой нужно управлять. См. список доступных директив.
  • Список разрешённых источников — перечень источников, для которых нужно управлять функцией. Функцию можно включить для всех источников или для определённых источников либо запретить её использование для всех источников.

Несколько примеров приведены ниже.

Связь с API разрешений

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

  • Политика разрешений позволяет серверу задавать, можно ли использовать функцию в определённом документе (или во встроенных в него <frame>). Такие функции называются управляемыми политикой — см. список директив политики разрешений.
  • API разрешений ограничивает доступ к функциям на основе разрешений, предоставленных пользователем. Эти функции перечислены в реестре разрешений.

Идентификатор каждой функции одинаков для обоих механизмов, например, geolocation для API геолокации. Для большинства функций API из реестра разрешений также предусмотрена соответствующая директива политики разрешений. Одно из исключений — API уведомлений.

Как правило, если политика разрешений блокирует использование мощной функции, у пользователя даже не запросят разрешение на её использование, а метод query() API разрешений вернёт значение denied для свойства state.

См. также «Разрешения» > «Связь со спецификацией политики разрешений».

Списки разрешённых источников

Список разрешённых источников — это перечень, принимающий одно или несколько следующих значений в скобках, разделённых пробелами:

  • *: функция будет разрешена в этом документе и во всех вложенных контекстах просмотра (<iframe>) независимо от их источника.
  • () (пустой список разрешённых источников): функция отключена в контекстах просмотра верхнего уровня и во вложенных контекстах просмотра. Эквивалент для атрибута <iframe> allow — 'none'.
  • self: функция будет разрешена в этом документе и во всех вложенных контекстах просмотра (<iframe>) только с тем же источником. Функция запрещена в документах с другими источниками во вложенных контекстах просмотра. self можно считать сокращённой записью https://your-site.example.com. Эквивалент для атрибута <iframe> allow — 'self'.
  • 'src': функция будет разрешена в этом <iframe>, если загруженный в него документ имеет тот же источник, что и URL в его атрибуте src. Это значение используется только в атрибуте <iframe> allow и является значением списка разрешённых источников по умолчанию для <iframe>.
  • "<origin>": функция разрешена для определённых источников (например, "https://a.example.com"). Источники следует разделять пробелами. Обратите внимание: источники в атрибутах <iframe> не заключаются в кавычки.

Значения * и () можно использовать только отдельно, а self и src можно сочетать с одним или несколькими источниками.

Примечание: Для директив задан список разрешённых источников по умолчанию, который всегда равен одному из значений *, self или none для HTTP-заголовка Permissions-Policy. Он определяет поведение по умолчанию, если директивы явно не перечислены в политике. Эти значения указаны на страницах справочника отдельных директив. Для атрибутов <iframe> allow поведение по умолчанию всегда равно src.

В браузерах с поддержкой этой возможности в источниках для политики разрешений можно использовать подстановочные знаки. Это позволяет вместо явного перечисления нескольких поддоменов в списке разрешённых источников указать их все в одном источнике с подстановочным знаком.

Таким образом, вместо

("https://example.com" "https://a.example.com" "https://b.example.com" "https://c.example.com")

можно указать

("https://example.com" "https://*.example.com")

Примечание: "https://*.example.com" не соответствует "https://example.com".

Примеры списков разрешённых источников:

  • *
  • ()
  • (self)
  • (src)
  • ("https://a.example.com")
  • ("https://a.example.com" "https://b.example.com")
  • (self "https://a.example.com" "https://b.example.com")
  • (src "https://a.example.com" "https://b.example.com")
  • ("https://*.example.com")

Синтаксис заголовка Permissions-Policy

Общий синтаксис выглядит так:

Permissions-Policy: <directive>=<allowlist>

Например, чтобы полностью запретить доступ к геолокации, нужно сделать следующее:

Permissions-Policy: geolocation=()

А чтобы разрешить доступ для части источников, нужно сделать следующее:

Permissions-Policy: geolocation=(self "https://a.example.com" "https://b.example.com")

Одновременно можно управлять несколькими функциями: для этого отправьте заголовок со списком политик, разделённых запятыми, или отдельный заголовок для каждой политики.

Например, следующие варианты эквивалентны:

Permissions-Policy: picture-in-picture=(), geolocation=(self "https://example.com"), camera=*;

Permissions-Policy: picture-in-picture=()
Permissions-Policy: geolocation=(self "https://example.com")
Permissions-Policy: camera=*

Синтаксис встроенного фрейма

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

Общий синтаксис выглядит так:

<iframe src="<origin>" allow="<directive> <allowlist>"></iframe>

Например, чтобы полностью запретить доступ к геолокации, нужно сделать следующее:

<iframe src="https://example.com" allow="geolocation 'none'"></iframe>

Чтобы применить политику к текущему источнику и другим источникам, нужно сделать следующее:

<iframe
  src="https://example.com"
  allow="geolocation 'self' https://a.example.com https://b.example.com"></iframe>

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

Одновременно можно управлять несколькими функциями, указав в атрибуте allow список директив политики, разделённых точками с запятой.

<iframe
  src="https://example.com"
  allow="geolocation 'self' https://a.example.com https://b.example.com; fullscreen 'none'"></iframe>

Отдельно стоит упомянуть значение src. Как упоминалось выше, использование этого значения в списке разрешённых источников означает, что соответствующая функция будет разрешена в этом <iframe>, если загруженный в него документ имеет тот же источник, что и URL в его атрибуте src. Это значение является значением allowlist по умолчанию для функций, перечисленных в allow, поэтому следующие варианты эквивалентны:

<iframe src="https://example.com" allow="geolocation 'src'"></iframe>
<iframe src="https://example.com" allow="geolocation"></iframe>

Примечание: Как вы, вероятно, заметили, синтаксис политик <iframe> немного отличается от синтаксиса заголовков Permissions-Policy. В первом по-прежнему используется синтаксис прежней спецификации Feature Policy, которую заменила политика разрешений.

Изолированные фреймы и политика разрешений

<fencedframe> взаимодействуют с политиками разрешений так же, как <iframe>, но с гораздо более строгими ограничениями. С помощью установленных для них политик разрешений можно включить только определённые функции, предназначенные для использования в <fencedframe>. Другие функции, управляемые политикой, в этом контексте недоступны.

Подробнее см. в разделе Политики разрешений, доступные изолированным фреймам.

Наследование политик встроенным контентом

Скрипты наследуют политику своего контекста просмотра независимо от источника. Это означает, что скрипты верхнего уровня наследуют политику основного документа.

Все <iframe> наследуют политику родительской страницы. Если у <iframe> есть атрибут allow и у родительской страницы есть Permissions-Policy, политики родительской страницы и атрибута allow объединяются с использованием наиболее ограничительного подмножества. Чтобы функция была включена в <iframe>, источник должен входить в список разрешённых источников как родительской страницы, так и атрибута allow.

Отключение функции в политике — необратимое переключение. Если родительский фрейм отключил функцию для дочернего фрейма, дочерний фрейм не может включить её снова; то же относится и ко всем его потомкам.

Примеры

>

Сочетание HTTP-заголовка и политик <iframe>

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

Permissions-Policy: geolocation=(self "https://trusted-ad-network.com")

В наших рекламных <iframe> мы можем разрешить доступ для источника https://trusted-ad-network.com следующим образом:

<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>

Если в <iframe> загрузится другой источник, у него не будет доступа к геолокации:

<iframe src="https://rogue-origin-example.com" allow="geolocation"></iframe>

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

Спецификация
Политика разрешений>
# permissions-policy-http-header-field>

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

Компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari в iOS Samsung Internet WebView для Android WebView в iOS
Permissions_Policy 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
accelerometer 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
ambient-light-sensor 66 79 Нет 53 Нет 66 Нет Нет Нет Нет Нет Нет
aria-notify
141Не поддерживается в ChromeOS.
141Не поддерживается в ChromeOS.
Нет
125Не поддерживается в ChromeOS.
Нет
141Не поддерживается в ChromeOS.
Нет
93Не поддерживается в ChromeOS.
Нет Нет
141Не поддерживается в ChromeOS.
Нет
attribution-reporting 117 117 Нет 103 Нет 117 Нет 78 Нет 24.0 117 Нет
autoplay 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
bluetooth 104 104 Нет 90 Нет 104 Нет 71 Нет 20.0 104 Нет
browsing-topics 115 115 Нет 101 Нет 115 Нет 77 Нет 23.0 115 Нет
camera 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
captured-surface-control 136 136 Нет 121 Нет Нет Нет Нет Нет Нет Нет Нет
ch-ua-high-entropy-values 144 144 Нет 128 Нет Нет Нет Нет Нет Нет Нет Нет
compute-pressure 125 125 Нет 111 Нет Нет Нет Нет Нет Нет Нет Нет
cross-origin-isolated 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
deferred-fetch 135 135 Нет 120 Нет 135 Нет 89 Нет 29.0 135 Нет
deferred-fetch-minimal 135 135 Нет 120 Нет 135 Нет 89 Нет 29.0 135 Нет
display-capture 94 94 Нет 80 Нет 94 Нет 66 Нет 17.0 94 Нет
encrypted-media 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
fullscreen 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
gamepad 103 103 Нет 89 Нет 103 Нет 71 Нет 20.0 103 Нет
geolocation 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
gyroscope 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
hid 89 89 Нет 75 Нет Нет Нет Нет Нет Нет Нет Нет
identity-credentials-get 110 110 Нет 96 Нет 110 Нет 74 Нет 21.0 Нет Нет
idle-detection 94 94 Нет 80 Нет 94 Нет 66 Нет 17.0 94 Нет
local-fonts 103 103 Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет
local-network 145 145 Нет 129 Нет 145 Нет 96 Нет Нет Нет Нет
local-network-access
142Заменено политиками разрешений local-network и loopback-network; выступает в качестве псевдонима для обеих.
142Заменено политиками разрешений local-network и loopback-network; выступает в качестве псевдонима для обеих.
Нет
126Заменено политиками разрешений local-network и loopback-network; выступает в качестве псевдонима для обеих.
Нет
142Заменено политиками разрешений local-network и loopback-network; выступает в качестве псевдонима для обеих.
Нет
93Заменено политиками разрешений local-network и loopback-network; выступает в качестве псевдонима для обеих.
Нет Нет Нет Нет
loopback-network 145 145 Нет 129 Нет 145 Нет 96 Нет Нет Нет Нет
magnetometer 66 79 Нет 53 Нет 66 Нет Нет Нет Нет Нет Нет
microphone 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
midi 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 88 Нет
on-device-speech-recognition 142 142 Нет 126 Нет Нет Нет Нет Нет Нет Нет Нет
otp-credentials 93 93 Нет 79 Нет 88 Нет 63 Нет 15.0 Нет Нет
payment 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 136 Нет
picture-in-picture 88 88 Нет Нет Нет 105 Нет 72 Нет 20.0 105 Нет
private-state-token-issuance 117 117 Нет 103 Нет 117 Нет 78 Нет 24.0 Нет Нет
private-state-token-redemption 117 117 Нет 103 Нет 117 Нет 78 Нет 24.0 Нет Нет
publickey-credentials-create 88 88 Нет Нет Нет 88 Нет Нет Нет 15.0 88 Нет
publickey-credentials-get 88 88 Нет Нет Нет 88 Нет Нет Нет 15.0 88 Нет
screen-wake-lock 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 Нет Нет
serial 89 89 Нет 75 Нет 89 Нет 63 Нет 15.0 89 Нет
storage-access 113 113 Нет 99 Нет 113 Нет 76 Нет 23.0 113 Нет
summarizer 138 138 Нет 122 Нет Нет Нет Нет Нет Нет Нет Нет
usb 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 Нет Нет
web-share 88 88 Нет 74 Нет 88 Нет 63 Нет 15.0 Нет Нет
wildcards 108 108 Нет 94 Нет 108 Нет 73 Нет 21.0 108 Нет
window-management 100 100 Нет 86 Нет 100 Нет 69 Нет 19.0 Нет Нет
xr-spatial-tracking 88 88 Нет 74 Нет 88 Нет Нет Нет 15.0 Нет Нет

См. также

  • Permissions-Policy HTTP-заголовок
  • атрибут allow у iframe
  • Управление функциями браузера с помощью Permissions Policy: руководство по использованию, которое также содержит несколько ссылок на демонстрации.
  • Политики разрешений и функций на chromestatus.com
  • Конфиденциальность, разрешения и информационная безопасность

© 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/Permissions_Policy

Spec-Zone.ru

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