Spec-Zone.ru › HTTP

Политика функций

Политика функций

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

Предупреждение: Заголовок Feature-Policy был переименован в Permissions-Policy в спецификации, и эта статья в конечном итоге будет обновлена, чтобы отразить это изменение.

Вкратце

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

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

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

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

Концепции и использование

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

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

Создание политики

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

Указание вашей политики

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

  • Заголовок HTTP Feature-Policy.
  • Атрибут allow для фреймов.

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

Для получения более подробной информации см. Использование Политики функций.

Выведение политики

Сценарии могут запрограммированно получить информацию о политике функций с помощью объекта FeaturePolicy, расположенного в Document.featurePolicy или HTMLIFrameElement.featurePolicy.

Типы функций, контролируемых политикой

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

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

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

Текущий набор функций, контролируемых политикой, делится на две большие категории:

  • Обеспечение соблюдения лучших практик для обеспечения хорошего пользовательского опыта.
  • Предоставление точного управления чувствительными или мощными функциями.

Рекомендации по обеспечению хорошего пользовательского опыта

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

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

Функции включают:

  • Анимации, влияющие на макет
  • Устаревшие форматы изображений
  • Слишком большие изображения
  • Синхронные скрипты
  • Синхронный XMLHTTPRequest
  • Неоптимизированные изображения
  • Неоптимизированные медиа

Точное управление определенными функциями

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

Функции включают (см. Список функций):

  • Акселерометр
  • Датчик освещенности
  • Автовоспроизведение
  • Камера
  • Зашифрованные медиа
  • Полноэкранный режим
  • Джойстик
  • Географическое положение
  • Гироскоп
  • Магнитометр
  • Микрофон
  • MIDI
  • PaymentRequest
  • Картинка-в-картинке
  • Динамики
  • USB
  • API совместного использования веб-контента
  • VR/XR

Примеры

  • Использование Политики функций
  • См. Демонстрации Политики функций для примеров использования многих политик.

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

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

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

Настольные Мобильные
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet
Feature_Policy
60
79
74
Поддерживается только через атрибут allow в элементах <iframe>.
Нет
47
11.1
Поддерживается только через атрибут allow в элементах <iframe>.
60
60
79
Поддерживается только через атрибут allow в элементах <iframe>.
44
11.3
Поддерживается только через атрибут allow в элементах <iframe>.
8.0
accelerometer
67
79
Нет
Нет
54
Нет
67
67
Нет
48
Нет
9.0
ambient-light-sensor
67
79
Нет
Нет
54
Нет
67
67
Нет
48
Нет
9.0
autoplay
64
79
74
Нет
51
Нет
64
64
Нет
47
Нет
9.0
battery
Нет
Будет реализовано, см. ошибку 1007264.
Нет
Будет реализовано, см. ошибку 1007264.
Нет
Нет
Нет
Будет реализовано, см. ошибку 1007264.
Нет
Нет
Будет реализовано, см. ошибку 1007264.
Нет
Будет реализовано, см. ошибку 1007264.
Нет
Нет
Будет реализовано, см. ошибку 1007264.
Нет
Нет
Будет реализовано, см. ошибку 1007264.
camera
60
79
74
Поддерживается только через атрибут allow в элементах <iframe>.
Нет
48
11.1
60
60
79
Поддерживается только через атрибут allow в элементах <iframe>.
45
11.3
8.0
display-capture
94
94
74
Поддерживается только через атрибут allow в элементах <iframe>.
Нет
80
13
Поддерживается только через атрибут allow в элементах <iframe>.
Нет
Нет
Нет
Нет
Нет
Нет
document-domain
77
79
74
Нет
64
Нет
Нет
Нет
Нет
Нет
Нет
Нет
encrypted-media
60
79
74
Нет
48
Нет
60
60
Нет
45
Нет
8.0
fullscreen
62
79
74
["Поддерживается только через атрибут allow в элементах <iframe>.", "До Firefox 80 применение fullscreen к <iframe> (т.е. через атрибут allow) не работает, если атрибут allowfullscreen также отсутствует."]
Нет
49
Нет
62
62
79
["Поддерживается только через атрибут allow в элементах <iframe>.", "До Firefox 80 применение fullscreen к <iframe> (т.е. через атрибут allow) не работает, если атрибут allowfullscreen также отсутствует."]
46
Нет
8.0
gamepad
86
86
91
["Поддерживается только через атрибут allow в элементах <iframe>.", "Список разрешенных по умолчанию - * вместо self (как требуется спецификацией)."]
Нет
72
Нет
Нет
86
91
["Поддерживается только через атрибут allow в элементах <iframe>.", "Список разрешенных по умолчанию - * вместо self (как требуется спецификацией)."]
Нет
Нет
Нет
geolocation
60
79
74
Поддерживается только через атрибут allow в элементах <iframe>.
Нет
47
Нет
60
60
79
Поддерживается только через атрибут allow в элементах <iframe>.
44
Нет
8.0
gyroscope
67
79
Нет
Нет
54
Нет
67
67
Нет
48
Нет
9.0
layout-animations
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
legacy-image-formats
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
magnetometer
67
79
Нет
Нет
54
Нет
Нет
67
Нет
48
Нет
9.0
microphone
60
79
74
Поддерживается только через атрибут allow в элементах <iframe>.
Нет
48
11.1
60
60
79
Поддерживается только через атрибут allow в элементах <iframe>.
45
11.3
8.0
midi
60
79
74
Нет
47
Нет
60
60
Нет
44
Нет
8.0
oversized-images
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
payment
60
79
74
Нет
47
Нет
60
60
Нет
44
Нет
8.0
picture-in-picture
71
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
publickey-credentials-get
84
84
Нет
Нет
Нет
Нет
84
84
Нет
Нет
Нет
14.0
screen-wake-lock
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
speaker-selection
Нет
Нет
92
Поддерживается только через атрибут allow в элементах <iframe>.
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
sync-xhr
65
79
Нет
Нет
52
Нет
65
65
Нет
47
Нет
9.0
unoptimized-images
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
unsized-media
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
usb
60
79
Нет
Нет
47
Нет
Нет
60
Нет
44
Нет
8.0
web-share
Нет
Нет
81
["Поддерживается только через атрибут allow в элементах <iframe>.", "Firefox распознает политику разрешений web-share, но это не оказывает никакого влияния в версиях Firefox, которые не поддерживают метод share()."]
Нет
Нет
Нет
Нет
Нет
81
Поддерживается только через атрибут allow в элементах <iframe>.
Нет
Нет
Нет
xr-spatial-tracking
79
79
Нет
Нет
66
Нет
Нет
79
Нет
Нет
Нет
12.0

См. также

  • Использование политики функций
  • Feature-Policy HTTP-заголовок
  • allow атрибут во фреймах iframe
  • Введение в политику функций
  • Политики функций на www.chromestatus.com
  • Тестер политики функций (расширение для инструментов разработчика Chrome)
  • Конфиденциальность, разрешения и безопасность информации

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

Spec-Zone.ru

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