На главную

Сеть

Permissions-Policy

Заголовок Permissions-Policy: какие функции браузера — камера, геолокация, оплата, датчики — доступны вашему сайту и встроенным iframe. С проверкой синтаксиса, импортом старого Feature-Policy и конфигом для серверов.

С чего начать

Импортировать готовый заголовок

Понимает и Permissions-Policy, и старый Feature-Policy с 'self' и 'none'.

Устройства

camera

Камера · по умолчанию только свой сайт

microphone

Микрофон · по умолчанию только свой сайт

geolocation

Геолокация · по умолчанию только свой сайт

display-capture

Захват экрана · по умолчанию только свой сайт

speaker-selection

Выбор динамика · по умолчанию только свой сайт

usb

WebUSB · по умолчанию только свой сайт

serial

Web Serial · по умолчанию только свой сайт

hid

WebHID · по умолчанию только свой сайт

bluetooth

Web Bluetooth · по умолчанию только свой сайт

midi

Web MIDI · по умолчанию только свой сайт

gamepad

Геймпад · по умолчанию только свой сайт

Датчики

accelerometer

Акселерометр · по умолчанию только свой сайт

gyroscope

Гироскоп · по умолчанию только свой сайт

magnetometer

Магнитометр · по умолчанию только свой сайт

ambient-light-sensor

Датчик освещённости · по умолчанию только свой сайт

xr-spatial-tracking

WebXR · по умолчанию только свой сайт

Данные и доступ

payment

Payment Request · по умолчанию только свой сайт

publickey-credentials-get

WebAuthn: вход · по умолчанию только свой сайт

publickey-credentials-create

WebAuthn: регистрация · по умолчанию только свой сайт

identity-credentials-get

FedCM · по умолчанию только свой сайт

otp-credentials

WebOTP (код из SMS) · по умолчанию только свой сайт

clipboard-read

Чтение буфера обмена · по умолчанию только свой сайт

clipboard-write

Запись в буфер обмена · по умолчанию только свой сайт

local-fonts

Список шрифтов системы · по умолчанию только свой сайт

storage-access

Storage Access API · по умолчанию всем

idle-detection

Idle Detection · по умолчанию только свой сайт

Реклама и приватность

browsing-topics

Topics API (реклама) · по умолчанию всем

attribution-reporting

Attribution Reporting · по умолчанию всем

Медиа и окно

fullscreen

Полноэкранный режим · по умолчанию только свой сайт

autoplay

Автовоспроизведение со звуком · по умолчанию только свой сайт

picture-in-picture

Картинка в картинке · по умолчанию всем

encrypted-media

EME (DRM) · по умолчанию только свой сайт

screen-wake-lock

Не гасить экран · по умолчанию только свой сайт

web-share

Web Share · по умолчанию только свой сайт

window-management

Управление окнами · по умолчанию только свой сайт

compute-pressure

Нагрузка на процессор · по умолчанию только свой сайт

sync-xhr

Синхронный XMLHttpRequest · по умолчанию всем

cross-origin-isolated

cross-origin isolation · по умолчанию только свой сайт

Permissions-Policy

Permissions-Policy: camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)

Куда вписать

nginx

add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)" always;

Apache (.htaccess)

Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)"

Caddy

header Permissions-Policy "camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)"

Express

app.use((req, res, next) => {
  res.setHeader('Permissions-Policy', "camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)");
  next();
});

Атрибут allow для одного iframe

<iframe src="https://widget.example.com/" allow="fullscreen 'self'"></iframe>

Заголовок задаёт потолок: iframe получит функцию, только если её разрешают и заголовок страницы, и allow.

Что важно знать

  • Синтаксис — словарь Structured Fields (RFC 8941): camera=(), а не camera 'none' как в CSP.
  • Источники пишутся в двойных кавычках и без пути: "https://maps.example.com".
  • В теге meta Permissions-Policy не работает — только заголовком ответа.
  • interest-cohort=() (отказ от FLoC) больше не нужен: Chrome его не знает и пишет ошибку в консоль.