Политика функций
Политика функций
Политика функций позволяет веб-разработчикам выборочно включать, отключать и изменять поведение определенных функций и 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
Примеры
- Использование Политики функций
- См. Демонстрации Политики функций для примеров использования многих политик.
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
См. также
© 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